Beispiel #1
0
 /// <summary>
 /// Public constructor
 /// </summary>
 public CodeGenerator(CodeGenerationParameters pars)
 {
     this.pars = pars;
 }
Beispiel #2
0
        /// <summary>
        /// This code generates code for single table
        /// </summary>
        string GenerateCodeForTable(CodeGenerationParameters pars, DBTable tab)
        {
            var name_upper = tab.Name.ToUpper().Trim();

            if (pars.excluded_tables != null && Array.IndexOf <string>(pars.excluded_tables, name_upper) >= 0)
            {
                return("");
            }
            if (pars.excluded_tables_prefix != null && name_upper.StartsWith(pars.excluded_tables_prefix))
            {
                return("");
            }

            var sb  = new StringBuilder();
            var sb2 = new StringBuilder();

            var class_name     = (tab.is_table ? pars.class_prefix : pars.view_prefix) + Utils.PascalCasing(tab.Name);
            var base_class     = " : " + (pars.base_class_for_tables != null && pars.base_class_for_tables != "" ? pars.base_class_for_tables : "object");
            var db_object_type = (tab.is_table ? "table" : "view");

            tab.ClassName    = class_name;
            tab.WasGenerated = true;
            table_and_views.Add(tab);

            sb.AppendLine(indent + "/// <summary> Wrapper for " + db_object_type + " " + tab.Name + ". </summary>");
            sb.AppendLine(indent + "[" + Consts.TableAttr + "(\"" + tab.Name + "\")]");
            sb.AppendLine(indent + "public partial class " + class_name + base_class + " {");

            var constructor_code = new List <string>();

            foreach (var field in tab.Fields)
            {
                var field_name = (pars.make_names_lowercase ? field.Name.ToLower() : field.Name);

                sb.AppendLine("");
                sb.AppendLine(indent + indent + "/// <summary> The value of the corresponding field in " + tab.Name + " " + db_object_type + ". </summary>");
                sb.Append(indent + indent + "[" + Consts.FieldAttr + "(\"" + field_name + "\"");

                var len_str = "";
                if (field.length > 0)
                {
                    len_str = "(" + field.length + ")";
                }
                else if (field.dbtype == "decimal")
                {
                    len_str = "(" + field.precision + "," + field.scale + ")";
                }
                sb.AppendFormat(", DbType=\"{0}{1}\"", field.dbtype, len_str);
                if (field.is_readonly || !tab.is_table)
                {
                    sb.Append(", ReadOnly=true");
                }
                if (field.is_nullable)
                {
                    sb.Append(", Nullable=true");
                }
                if (field.is_identity)
                {
                    sb.Append(", Identity=true");
                }
                if (field.is_key)
                {
                    sb.Append(", Key=true");
                }
                if (field.length >= 0)
                {
                    sb.Append(", MaxLen=" + field.length);
                }
                if (type_map.IsUnicodeType(field.dbtype))
                {
                    sb.Append(", Unicode=true");
                }

                sb.AppendLine(")]");

                var member_name = CreateValidCsName(pars.member_prefix + field_name);
                var member_type = type_map.GetDesc(field.dbtype, field.is_nullable, field.length);

                field.NameInCode = member_name;

                sb.Append(indent + indent + "public " + member_type + " " + member_name);
                if (field.default_value != null && field.default_value != "")
                {
                    //sb.Append(" = " + field.default_value);
                    constructor_code.Add(indent + indent + indent + member_name + " = " + field.default_value + ";");
                }
                sb.AppendLine("{ get; set; }");

                sb2.AppendLine(indent + indent + indent + "///<summary>Name of column inside this table</summary>");
                sb2.AppendFormat(indent + indent + indent + "public const string {0} = @\"{0}\";", member_name);
                sb2.AppendLine();
            }

            if (constructor_code.Count > 0)
            {
                sb.AppendLine();
                sb.AppendLine(indent + indent + "///<summary> Public constructor that sets default values </summary>");
                sb.AppendLine(indent + indent + "public " + class_name + "() {");
                foreach (var ts in constructor_code)
                {
                    sb.AppendLine(ts);
                }
                sb.AppendLine(indent + indent + "}");
            }

            sb.AppendLine("");
            sb.AppendLine(indent + indent + "#region Columns Struct");
            sb.AppendLine(indent + indent + "///<summary>Columns for this table</summary>");
            sb.AppendLine(indent + indent + "public struct Columns {");
            sb.Append(sb2.ToString());
            sb.AppendLine(indent + indent + "}");
            sb.AppendLine(indent + indent + "#endregion");
            sb.AppendLine();
            sb.AppendLine(indent + indent + "///<summary> Name of this table (in database) </summary>");
            sb.AppendFormat(indent + indent + "public static string TableName = @\"{0}\";", tab.Name);
            sb.AppendLine();

            if (pars.generate_query_object)
            {
                sb.AppendLine();
                sb.AppendLine(indent + indent + "///<summary> Simple utility function for queries </summary>");
                sb.AppendLine(indent + indent + "public static Query<" + class_name + "> CreateQuery() { return new Query<" + class_name + ">(); }");
            }

            sb.AppendLine(indent + "}");
            return(sb.ToString());
        }
        /// <summary>
        /// This method loads stored procedure meta-data from specified connection
        /// </summary>
        public void Load(SqlConnection con, SqlTransaction trans, CodeGenerationParameters cgp)
        {
            if (Name == "")
            {
                throw new Exception("Could not load SP info - name not set yet.");
            }

            SqlCommand cmd = Utils.GetSpParameters(con, trans, Name);

            var ar           = new List <SpParam>();
            var ar_exec_list = new List <string>();

            foreach (SqlParameter par_x in cmd.Parameters)
            {
                if (par_x.ParameterName.ToUpper() == "@RETURN_VALUE")
                {
                    continue;
                }
                SpParam par = new SpParam();
                par.Name           = par_x.ParameterName.Replace("@", "");
                par.is_out         = (par_x.Direction == ParameterDirection.Output || par_x.Direction == ParameterDirection.InputOutput);
                par.type           = par_x.DbType;
                par.orig_parameter = par_x;
                ar.Add(par);
                switch (par_x.SqlDbType)
                {
                case SqlDbType.UniqueIdentifier:
                    ar_exec_list.Add("null");
                    break;

                case SqlDbType.Bit:
                    ar_exec_list.Add("1");
                    break;

                case SqlDbType.Char:
                case SqlDbType.VarChar:
                case SqlDbType.Text:
                case SqlDbType.NChar:
                case SqlDbType.NVarChar:
                case SqlDbType.NText:
                    ar_exec_list.Add("''");
                    break;

                case SqlDbType.DateTime:
                    ar_exec_list.Add("'20090101'");
                    break;

                case SqlDbType.Decimal:
                case SqlDbType.Int:
                case SqlDbType.SmallInt:
                case SqlDbType.TinyInt:
                case SqlDbType.BigInt:
                    ar_exec_list.Add("1");
                    break;

                default:
                    ar_exec_list.Add("null");
                    Console.WriteLine(string.Format("{0} {1}", par_x.DbType, par_x.SqlDbType));
                    break;
                }
            }
            parameters = ar.ToArray();


            var sql = "SELECT routine_definition FROM information_schema.routines WHERE specific_name  = '" + this.Name + "'";

            cmd = new SqlCommand(sql, con, trans);
            //System.Diagnostics.Trace.WriteLine(sql);
            var ds = Utils.GetDataSet(cmd);
            var dt = ds.Tables[0];

            this.StoredProcedureDefinition = dt.Rows[0][0].ToString();

            if (this.StoredProcedureReturnsData)
            {
                if (
                    cgp.sp_data_wrapper_flag == null ||
                    cgp.sp_data_wrapper_flag.Trim() == "" ||
                    this.StoredProcedureDefinition.Contains("-- " + cgp.sp_data_wrapper_flag)
                    )
                {
                    sql = "exec dbo." + this.Name;
                    //if (ar_exec_list.Count > 0) {
                    //    sql += " " + string.Join(", ", ar_exec_list.ToArray());
                    //}
                    var cmd2 = new SqlCommand(sql, con, trans);
                    System.Diagnostics.Trace.WriteLine(sql);
                    this.ReturnedData = Utils.GetDataSet(cmd2);
                }
            }
        }