/// <summary> /// Public constructor /// </summary> public CodeGenerator(CodeGenerationParameters pars) { this.pars = pars; }
/// <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); } } }