///<summary>priKeyName2=null for not mobile.</summary> public static List <DbSchemaCol> GetListColumns(string priKeyName1, string priKeyName2, List <FieldInfo> fieldsExceptPri, bool isMobile) { List <DbSchemaCol> retVal = new List <DbSchemaCol>(); //DbSchemaCol col; retVal.Add(new DbSchemaCol(priKeyName1, OdDbType.Long)); if (isMobile) { retVal.Add(new DbSchemaCol(priKeyName2, OdDbType.Long)); } CrudSpecialColType specialType; for (int f = 0; f < fieldsExceptPri.Count; f++) { if (isMobile && fieldsExceptPri[f].Name == priKeyName1) //2 already skipped { continue; } specialType = CrudGenHelper.GetSpecialType(fieldsExceptPri[f]); TextSizeMySqlOracle textsize = TextSizeMySqlOracle.Small; if (specialType == CrudSpecialColType.TextIsClob) { textsize = TextSizeMySqlOracle.Medium; } retVal.Add(new DbSchemaCol(fieldsExceptPri[f].Name, GetOdDbTypeFromColType(fieldsExceptPri[f].FieldType, specialType), textsize)); } return(retVal); }
///<summary>Creates the Data Interface "s" classes for new tables, complete with typical stubs. Asks user first.</summary> public static void Create(string convertDbFile, Type typeClass, string dbName, bool isMobile) { string Sname = GetSname(typeClass.Name); string fileName = null; if (isMobile) { fileName = @"..\..\..\OpenDentBusiness\Mobile\Data Interface\" + Sname + ".cs"; } else { fileName = @"..\..\..\OpenDentBusiness\Data Interface\" + Sname + ".cs"; } if (File.Exists(fileName)) { return; } if (CrudGenHelper.IsMissingInGeneral(typeClass)) { return; } if (MessageBox.Show("Create stub for " + fileName + "?", "", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } string snippet = GetSnippet(typeClass, SnippetType.EntireSclass, isMobile); File.WriteAllText(fileName, snippet); //Process.Start(fileName); MessageBox.Show(fileName + " has been created. Be sure to add it to the project and to SVN"); }
///<summary>Writes any necessary queries to the end of the ConvertDatabase file. Usually zero or one. The convertDbFile could also be the one in the Mobile folder.</summary> public static void Write(string convertDbFile, Type typeClass, string dbName, bool isMobile) { StringBuilder strb; FieldInfo[] fields = typeClass.GetFields(); //We can't assume they are in the correct order. FieldInfo priKey = null; FieldInfo priKey1 = null; FieldInfo priKey2 = null; if (isMobile) { priKey1 = CrudGenHelper.GetPriKeyMobile1(fields, typeClass.Name); priKey2 = CrudGenHelper.GetPriKeyMobile2(fields, typeClass.Name); } else { priKey = CrudGenHelper.GetPriKey(fields, typeClass.Name); } string tablename = CrudGenHelper.GetTableName(typeClass); //in lowercase now. string priKeyParam = null; string priKeyParam1 = null; string priKeyParam2 = null; if (isMobile) { priKeyParam1 = priKey1.Name.Substring(0, 1).ToLower() + priKey1.Name.Substring(1); //lowercase initial letter. Example customerNum priKeyParam2 = priKey2.Name.Substring(0, 1).ToLower() + priKey2.Name.Substring(1); //lowercase initial letter. Example patNum } else { priKeyParam = priKey.Name.Substring(0, 1).ToLower() + priKey.Name.Substring(1); //lowercase initial letter. Example patNum } string obj = typeClass.Name.Substring(0, 1).ToLower() + typeClass.Name.Substring(1); //lowercase initial letter. Example feeSched or feeSchedm List <FieldInfo> fieldsExceptPri = null; if (isMobile) { fieldsExceptPri = CrudGenHelper.GetFieldsExceptPriKey(fields, priKey2); //for mobile, only excludes PK2 } else { fieldsExceptPri = CrudGenHelper.GetFieldsExceptPriKey(fields, priKey); } CrudSpecialColType specialType; string command = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '" + dbName + "' AND table_name = '" + tablename + "'"; if (DataCore.GetScalar(command) != "1") { if (!CrudGenHelper.IsMissingInGeneral(typeClass)) { MessageBox.Show("This table was not found in the database:" + rn + tablename + rn + "Queries will be found at the end of " + Path.GetFileName(convertDbFile)); strb = new StringBuilder(); strb.Append(rn + rn + t4 + "/*"); List <DbSchemaCol> cols = null; if (isMobile) { cols = CrudQueries.GetListColumns(priKey1.Name, priKey2.Name, fieldsExceptPri, true); } else { cols = CrudQueries.GetListColumns(priKey.Name, null, fieldsExceptPri, false); } strb.Append("\r\n" + CrudSchemaRaw.AddTable(tablename, cols, 4, isMobile)); strb.Append(rn + t4 + "*/"); File.AppendAllText(convertDbFile, strb.ToString()); } } List <FieldInfo> newColumns = CrudGenHelper.GetNewFields(fields, typeClass, dbName); if (newColumns.Count > 0) { strb = new StringBuilder(); strb.Append("The following columns were not found in the database."); for (int f = 0; f < newColumns.Count; f++) { strb.Append(rn + tablename + "." + newColumns[f].Name); } strb.Append(rn + "Query will be found at the end of " + Path.GetFileName(convertDbFile)); MessageBox.Show(strb.ToString()); //one message for all new columns in a table. strb = new StringBuilder(); strb.Append(rn + rn + t4 + "/*"); for (int f = 0; f < newColumns.Count; f++) { specialType = CrudGenHelper.GetSpecialType(newColumns[f]); OdDbType odtype = GetOdDbTypeFromColType(newColumns[f].FieldType, specialType); TextSizeMySqlOracle textsize = TextSizeMySqlOracle.Small; if (specialType == CrudSpecialColType.TextIsClob) { textsize = TextSizeMySqlOracle.Medium; } DbSchemaCol col = new DbSchemaCol(newColumns[f].Name, odtype, textsize); strb.Append(CrudSchemaRaw.AddColumnEnd(tablename, col, 4)); } strb.Append(rn + t4 + "*/"); File.AppendAllText(convertDbFile, strb.ToString()); } }
public static string Create() { StringBuilder strb = new StringBuilder(); //This is a stub that is to be replaced with some good code generation: strb.Append(@"using System; using System.Collections.Generic; using System.Text; namespace OpenDentBusiness { ///<summary>Please ignore this class. It's used only for testing.</summary> public class SchemaCrudTest { ///<summary>Example only</summary> public static void AddTableTempcore() { string command="""";" ); Type typeClass = typeof(SchemaTable); FieldInfo[] fields = typeClass.GetFields(); FieldInfo priKey = CrudGenHelper.GetPriKey(fields, typeClass.Name); List <FieldInfo> fieldsExceptPri = CrudGenHelper.GetFieldsExceptPriKey(fields, priKey); List <DbSchemaCol> cols = CrudQueries.GetListColumns(priKey.Name, null, fieldsExceptPri, false); strb.Append("\r\n" + CrudSchemaRaw.AddTable("tempcore", cols, 3, false)); strb.Append(@" } ///<summary>Example only</summary> public static void AddColumnEndClob() { string command="""";" ); DbSchemaCol col = new DbSchemaCol("ColEndClob", OdDbType.Text, TextSizeMySqlOracle.Medium); strb.Append("\r\n" + CrudSchemaRaw.AddColumnEnd("tempcore", col, 3)); strb.Append(@" } ///<summary>Example only</summary> public static void AddColumnEndInt() { string command="""";" ); col = new DbSchemaCol("ColEndInt", OdDbType.Int); strb.Append("\r\n" + CrudSchemaRaw.AddColumnEnd("tempcore", col, 3)); strb.Append(@" } ///<summary>Example only</summary> public static void AddColumnEndTimeStamp() { string command="""";" ); col = new DbSchemaCol("ColEndTimeStamp", OdDbType.DateTimeStamp); strb.Append("\r\n" + CrudSchemaRaw.AddColumnEnd("tempcore", col, 3)); strb.Append(@" } ///<summary>Example only</summary> public static void AddIndex() { string command="""";" ); strb.Append("\r\n" + CrudSchemaRaw.AddIndex("tempcore", "ColEndInt", 3)); strb.Append(@" } ///<summary>Example only</summary> public static void DropColumn() { string command="""";" ); strb.Append("\r\n" + CrudSchemaRaw.DropColumn("tempcore", "TextLargeTest", 3)); strb.Append(@" } //AddColumnAfter //DropColumnTimeStamp //DropIndex //etc. } }"); return(strb.ToString()); }
public static string GetSnippet(Type typeClass, SnippetType snipType, bool isMobile) { //bool isMobile=CrudGenHelper.IsMobile(typeClass); string Sname = GetSname(typeClass.Name); FieldInfo[] fields = typeClass.GetFields(); //We can't assume they are in the correct order. FieldInfo priKey = null; FieldInfo priKey1 = null; FieldInfo priKey2 = null; if (isMobile) { priKey1 = CrudGenHelper.GetPriKeyMobile1(fields, typeClass.Name); priKey2 = CrudGenHelper.GetPriKeyMobile2(fields, typeClass.Name); } else { priKey = CrudGenHelper.GetPriKey(fields, typeClass.Name); } string priKeyParam = null; string priKeyParam1 = null; string priKeyParam2 = null; if (isMobile) { priKeyParam1 = priKey1.Name.Substring(0, 1).ToLower() + priKey1.Name.Substring(1); //lowercase initial letter. Example customerNum priKeyParam2 = priKey2.Name.Substring(0, 1).ToLower() + priKey2.Name.Substring(1); //lowercase initial letter. Example patNum } else { priKeyParam = priKey.Name.Substring(0, 1).ToLower() + priKey.Name.Substring(1); //lowercase initial letter. Example patNum } string obj = typeClass.Name.Substring(0, 1).ToLower() + typeClass.Name.Substring(1); //lowercase initial letter. Example feeSched string tablename = CrudGenHelper.GetTableName(typeClass); //in lowercase now. Example feesched List <FieldInfo> fieldsExceptPri = null; if (isMobile) { fieldsExceptPri = CrudGenHelper.GetFieldsExceptPriKey(fields, priKey2); //for mobile, only excludes PK2 } else { fieldsExceptPri = CrudGenHelper.GetFieldsExceptPriKey(fields, priKey); } switch (snipType) { default: return("snippet type not found."); case SnippetType.Insert: if (isMobile) { return(GetInsert(typeClass.Name, obj, null, true)); } else { return(GetInsert(typeClass.Name, obj, priKey.Name, false)); } case SnippetType.Update: return(GetUpdate(typeClass.Name, obj, isMobile)); case SnippetType.EntireSclass: if (isMobile) { return(GetEntireSclassMobile(typeClass.Name, obj, priKey1.Name, priKey2.Name, Sname, tablename, priKeyParam1, priKeyParam2)); } else { return(GetEntireSclass(typeClass.Name, obj, priKey.Name, Sname, tablename, priKeyParam)); } case SnippetType.CreateTable: return("Currently unavailable."); /* * if(isMobile) { * return GetCreateTable(tablename,priKey1.Name,priKey2.Name,fieldsExceptPri); * } * else { * return GetCreateTable(tablename,priKey.Name,null,fieldsExceptPri); * }*/ } }