##|TYPE Template ##|UNIQUEID 97ec3dfd-e032-4457-bf04-af1114b66bff ##|TITLE Debug Data Connection ##|NAMESPACE CSLA_21 ##|SOURCE_TYPE Source ##|OUTPUT_LANGUAGE Transact-SQL ##|GUI_ENGINE .Net Script ##|GUI_LANGUAGE C# ##|GUI_BEGIN public class GeneratedGui : DotNetScriptGui { public GeneratedGui(ZeusContext context) : base(context) {} //----------------------------------------- // The User Interface Entry Point //----------------------------------------- public override void Setup() { if ( !input.Contains( "chooseTables" ) || !input.Contains( "txtPath" ) || ( !input.Contains( "chkClass" ) && !input.Contains( "chkNaming" ) ) ) { if(context.Objects.ContainsKey("DnpUtils"))DnpUtils.ReadInputFromCache(context); ui.Title = "CSLA Object Mapping"; ui.Width = 600; ui.Height = 660; GuiLabel label1 = ui.AddLabel( "label1", "Select the output path:", "Select the output path in the field below." ); //label1.Width = 200; GuiTextBox outputPath = ui.AddTextBox( "outputPath", GetDefault("defaultOutputPath"), "Select the Output Path." ); outputPath.Width = 450; GuiFilePicker selectPath = ui.AddFilePicker( "selectPath", "Select Path", "Select the Output Path.", "outputPath", true ); selectPath.Top = outputPath.Top; selectPath.Width = 100; selectPath.Left = outputPath.Left + outputPath.Width + 20; GuiLabel label2 = ui.AddLabel( "label2", "Namespace: ", "Provide your objects namespace." ); label2.Width = 280; GuiTextBox classNamespace = ui.AddTextBox( "classNamespace", "Volian.Object.Library", "Provide your objects namespace." ); classNamespace.Width = 280; GuiLabel label3 = ui.AddLabel( "label3", "Member prefix: ", "Provide your member prefix." ); label3.Width = 100; label3.Top = label2.Top; label3.Left = label2.Width + 20; GuiTextBox memberPrefix = ui.AddTextBox( "memberPrefix", "_", "Provide your member prefix." ); memberPrefix.Width = 100; memberPrefix.Top = classNamespace.Top; memberPrefix.Left = classNamespace.Width + 20; GuiLabel label3A = ui.AddLabel( "label3A", "dbConnection: ", "Provide a Connection Name." ); label3A.Width = 150; label3A.Top = label3.Top; label3A.Left = label3.Left+label3.Width + 10; GuiTextBox dbConnection = ui.AddTextBox( "dbConnection", "VEPROMS", "Provide a Connection Name." ); dbConnection.Width = 150; dbConnection.Top = memberPrefix.Top; dbConnection.Left = memberPrefix.Left + memberPrefix.Width + 10; // Setup Database selection combobox. GuiLabel label4 = ui.AddLabel( "label4", "Select a database:", "Select a database in the dropdown below." ); label4.Width = 280; GuiComboBox chooseDatabase = ui.AddComboBox( "chooseDatabase", "Select a database." ); chooseDatabase.Width = 280; GuiCheckBox chkDetail = MakeGuiCheckBox( "chkDetail", "MakeList & FK", true, "Show MakeList and FK",100 ); chkDetail.Checked = false; GuiCheckBox chkColumns = MakeGuiCheckBox( "chkColumns", "Columns", true, "Show Columns" ,150,chkDetail,200,0); chkColumns.Checked = false; GuiCheckBox chkFKCalc1 = MakeGuiCheckBox( "chkFKCalc1", "FK Calc 1", true, "FK Calc 1" ,150,chkDetail,400,0); chkFKCalc1.Checked = false; GuiCheckBox chkUnique = MakeGuiCheckBox( "chkUnique", "Unique", true, "Unique Indexes" ,150,chkDetail,0, -1); chkUnique.Checked = false; GuiCheckBox chkFKCalc2 = MakeGuiCheckBox( "chkFKCalc2", "FK Calc 2", true, "FK Calc 2" ,150,chkDetail,200, -1); chkFKCalc2.Checked = false; GuiCheckBox chkColumns2 = MakeGuiCheckBox("chkColumns2","PrimFK",true,"Primary Foreign Key",150,chkDetail,400, -1); chkColumns2.Checked = false; GuiCheckBox chkRelated = MakeGuiCheckBox("chkRelated","Related",true,"Related",150,chkDetail,0,-2); chkRelated.Checked = false; GuiCheckBox chkOne2One = MakeGuiCheckBox("chkOne2One","One to One",true,"One to Many and One to One",150,chkDetail,200, -2); chkOne2One.Checked = false; GuiCheckBox chkIndexes = MakeGuiCheckBox("chkIndexes","Indexes",true,"Compare Foreign Keys to Indexes",150,chkDetail,400, -2); chkIndexes.Checked = false; GuiCheckBox chkInternal = MakeGuiCheckBox("chkInternal","Internal",true,"Internal Relationships",150,chkDetail, 0, -3); chkInternal.Checked = false; GuiCheckBox chkAlias = MakeGuiCheckBox("chkAlias","Alias",true,"Aliases",150,chkDetail, 200, -3); chkAlias.Checked = false; GuiCheckBox chkNames = MakeGuiCheckBox("chkNames","Names",true,"Names",150,chkDetail, 400, -3); chkNames.Checked = false; // Setup Tables selection multi-select listbox. GuiLabel label7 = ui.AddLabel( "label7", "Select tables:", "Select tables from the listbox below." ); //label7.Top = chkInternal.Top + 20; GuiListBox chooseTables = ui.AddListBox( "chooseTables", "Select tables." ); chooseTables.Height = 120; // Setup Views selection multi-select listbox. GuiLabel label8 = ui.AddLabel( "label8", "Select views:", "Select views from the listbox below." ); GuiListBox chooseViews = ui.AddListBox( "chooseViews", "Select views." ); chooseViews.Height = 80; // Attach the onchange event to the cmbDatabases control. setupDatabaseDropdown( chooseDatabase ); GuiLabel labelTest = ui.AddLabel( "labelTest", "Status: Select CheckBox to Run", "Checkbox must be selected first" ); chooseDatabase.AttachEvent( "onchange", "chooseDatabase_onchange" ); chkDetail.AttachEvent( "onclick", "checkbox_onclick" ); chkColumns.AttachEvent( "onclick", "checkbox_onclick" ); chkFKCalc1.AttachEvent( "onclick", "checkbox_onclick" ); chkUnique.AttachEvent( "onclick", "checkbox_onclick" ); chkFKCalc2.AttachEvent( "onclick", "checkbox_onclick" ); chkColumns2.AttachEvent( "onclick", "checkbox_onclick" ); chkRelated.AttachEvent( "onclick", "checkbox_onclick" ); chkOne2One.AttachEvent( "onclick", "checkbox_onclick" ); chkIndexes.AttachEvent( "onclick", "checkbox_onclick" ); chkInternal.AttachEvent( "onclick", "checkbox_onclick" ); chkAlias.AttachEvent( "onclick", "checkbox_onclick" ); chkNames.AttachEvent( "onclick", "checkbox_onclick" ); chooseTables.AttachEvent( "onchange", "chooseTable_onclick" ); ui.ShowGui = true; GuiButton btnOK = ui.AddButton( "OK", "OK", "Generate Code" ); btnOK.ClosesForm = true; btnOK.Enabled = false; } else { ui.ShowGui = false; } } public void setupDatabaseDropdown( GuiComboBox Databases ) { try { if( MyMeta.IsConnected ) { Databases.BindData( MyMeta.Databases ); if( MyMeta.DefaultDatabase != null ) { Databases.SelectedValue = MyMeta.DefaultDatabase.Alias; bindTables( Databases.SelectedValue ); bindViews( Databases.SelectedValue ); } } } catch { } } public void bindTables( string sDatabase ) { //int count = 0; GuiListBox lstTables = ui["chooseTables"] as GuiListBox; try { IDatabase db = MyMeta.Databases[sDatabase]; lstTables.BindData(db.Tables); } catch { } } public void bindViews( string sDatabase ) { //int count = 0; GuiListBox lstViews = ui["chooseViews"] as GuiListBox; try { IDatabase db = MyMeta.Databases[sDatabase]; lstViews.BindData( db.Views ); } catch { } } public void chooseDatabase_onchange( GuiComboBox control ) { //int count = 0; GuiComboBox cmbDatabases = ui["chooseDatabase"] as GuiComboBox; bindTables( cmbDatabases.SelectedText ); bindViews( cmbDatabases.SelectedText ); GuiTextBox dbConnection = ui["dbConnection"] as GuiTextBox; dbConnection.Text=cmbDatabases.SelectedText; GuiTextBox classNamespace = ui["classNamespace"] as GuiTextBox; classNamespace.Text=cmbDatabases.SelectedText + ".Object.Library"; Status = string.Format("chooseDatabase_onchange"); } private string Status { set { GuiLabel labelTest = ui["labelTest"] as GuiLabel; labelTest.Text = value; } } private GuiButton btnOK { get { foreach(IGuiControl ctrl in ui) { if(ctrl.GetType().Name == "GuiButton"){ return ctrl as GuiButton; } } return null; } } public void SetupOkButton() { Status = string.Format("checkBox_onchange"); GuiCheckBox chkDetail= ui["chkDetail"] as GuiCheckBox; GuiCheckBox chkColumns= ui["chkColumns"] as GuiCheckBox; GuiCheckBox chkFKCalc1= ui["chkFKCalc1"] as GuiCheckBox; GuiCheckBox chkUnique= ui["chkUnique"] as GuiCheckBox; GuiCheckBox chkFKCalc2= ui["chkFKCalc2"] as GuiCheckBox; GuiCheckBox chkColumns2= ui["chkColumns2"] as GuiCheckBox; GuiCheckBox chkRelated= ui["chkRelated"] as GuiCheckBox; GuiCheckBox chkOne2One= ui["chkOne2One"] as GuiCheckBox; GuiCheckBox chkIndexes= ui["chkIndexes"] as GuiCheckBox; GuiCheckBox chkInternal= ui["chkInternal"] as GuiCheckBox; GuiCheckBox chkAlias= ui["chkAlias"] as GuiCheckBox; GuiCheckBox chkNames= ui["chkNames"] as GuiCheckBox; GuiLabel labelTest = ui["labelTest"] as GuiLabel; string status = ""; if(chkDetail.Checked)status+=", " + chkDetail.Text; if(chkColumns.Checked)status+=", " + chkColumns.Text; if(chkFKCalc1.Checked)status+=", " + chkFKCalc1.Text; if(chkUnique.Checked)status+=", " + chkUnique.Text; if(chkFKCalc2.Checked)status+=", " + chkFKCalc2.Text; if(chkColumns2.Checked)status+=", " + chkColumns2.Text; if(chkRelated.Checked)status+=", " + chkRelated.Text; if(chkOne2One.Checked)status+=", " + chkOne2One.Text; if(chkIndexes.Checked)status+=", " + chkIndexes.Text; if(chkInternal.Checked)status+=", " + chkInternal.Text; if(chkAlias.Checked)status+=", " + chkAlias.Text; if(chkNames.Checked)status+=", " + chkNames.Text; if(status == "") { btnOK.Enabled = false; Status="Status: Select CheckBox to Run"; } else { GuiListBox lb = ui["chooseTables"] as GuiListBox; if(lb.SelectedItems.Count > 0) { btnOK.Enabled = true; Status = string.Format("Will process: {0} {1}",status.Substring(2),lb.SelectedItems.Count); } else { Status = "Select one or more tables to process."; btnOK.Enabled = false; } } } public void checkbox_onclick( GuiCheckBox control ) { SetupOkButton(); } public void chooseTable_onclick( GuiListBox control ) { SetupOkButton(); } private string GetDefault(string sName) { if( input.Contains( sName ) ) { return input[sName].ToString(); } return ""; } <%#FILE MakeGuiCheckBox.cs %> } ##|GUI_END ##|BODY_MODE Markup ##|BODY_ENGINE .Net Script ##|BODY_LANGUAGE C# ##|BODY_TAG_START <% ##|BODY_TAG_END %> ##|BODY_BEGIN <%#NAMESPACE System.IO, System.Text, System.Text.RegularExpressions, System.Globalization %><% public class GeneratedTemplate : DotNetScriptTemplate { public GeneratedTemplate(ZeusContext context) : base(context) {} // Members private string _dbName; private ArrayList _selectedTables; private ArrayList _selectedViews; private string _exportPath; private string _nameSpace; private string _prefix="_"; private string _dbConnection; private string _tableName; private string _className=""; private ITable _workingTable; private Hashtable dicIndexes; private Hashtable dicDrop; //private Hashtable dicRead; //private Hashtable dicReadI; //public void SaveFile(string sProc) //{ // output.save( Path.Combine( _exportPath, sProc + ".SQL" ), false ); // //output.writeln("--" + Path.Combine( _exportPath, "CSLA.SQL" )); // output.clear(); //} public delegate bool Filter(IColumn column); //--------------------------------------------------- // Render() is where you want to write your logic //--------------------------------------------------- public override void Render() { if(context.Objects.ContainsKey("DnpUtils"))DnpUtils.SaveInputToCache(context); //InitializeMembers(); _exportPath = input["outputPath"].ToString(); _dbName = input["chooseDatabase"].ToString(); IDatabase db = MyMeta.Databases[_dbName]; output.clear(); _selectedTables = input["chooseTables"] as ArrayList; dicIndexes = new Hashtable(); dicDrop = new Hashtable(); foreach( string _newTable in _selectedTables ) { _workingTable = MyMeta.Databases[_dbName].Tables[_newTable]; if((bool)input["chkDetail"])ShowTable1( _workingTable ); if((bool)input["chkColumns"])ShowTable2( _workingTable ); if((bool)input["chkFKCalc1"])ShowTable3( _workingTable ); if((bool)input["chkUnique"])ShowTable4( _workingTable ); if((bool)input["chkFKCalc2"])ShowTable5( _workingTable ); if((bool)input["chkColumns2"])ShowTable6( _workingTable ); if((bool)input["chkRelated"])ShowTable7( _workingTable ); if((bool)input["chkOne2One"])ShowTable8( _workingTable ); if((bool)input["chkIndexes"])ShowTable9( _workingTable ); if((bool)input["chkInternal"])ShowInternalRelated( _workingTable ); if((bool)input["chkAlias"])ShowAlias( _workingTable ); if((bool)input["chkNames"])ShowNames( _workingTable ); } //foreach(ITable tbl in db.Tables) //{ // ShowTable3(tbl); //} //foreach(IProcedure ip in db.Procedures) //{ // if(ip.Schema != "sys" && ip.Name.StartsWith("sp_")){ // WriteLine("{0} {1}",ip.Name,ip.Schema); // ShowProperties(ip.Properties,2); // } //} //SaveFile(); } private string ForeignKeyCheck(IColumn col) { if(col.IsInForeignKey) { foreach(IForeignKey fk in col.ForeignKeys) { if(IsIn(col,fk.ForeignColumns))return " FK"; } return " fk"; } return ""; } private void ShowColumns(IList cols,int indent,string title) { output.writeln(string.Format("{0}{1}","".PadRight(indent),title)); foreach(IColumn col in cols) { output.writeln(string.Format("{0}{1}{2} {3}{4}{5} {6} {7} {8}", (col.IsNullable?" ":"*"), "".PadRight(indent+2), col.Name, col.DataTypeNameComplete, (col.IsInPrimaryKey?" PK":""), ForeignKeyCheck(col), (col.IsAutoKey ? "Auto - (" + col.AutoKeySeed.ToString() + ")":""), col.Default,col.Description)); ShowProperties(col.AllProperties,indent+2); } } private void ShowProperties(IPropertyCollection prps, int indent) { if(prps.Count == 0)return; output.writeln(string.Format("{0}Properties:","".PadRight(indent))); foreach(IProperty prp in prps) { output.writeln(string.Format("{0}{1}={2}","".PadRight(indent+2),prp.Key,prp.Value)); } } private bool IsPrimaryKey(IIndex ind) { IColumns colsi = ind.Columns; IColumns colsp = ind.Table.PrimaryKeys; if(colsi.Count != colsp.Count)return false; for(int i=0;i 0){ output.writeln(string.Format("Table {0}",tbl.Name)); //ShowProperties(tbl.AllProperties,2); //ShowColumns(tbl.Columns,2,"Columns:"); //ShowColumns(tbl.PrimaryKeys,2,"Primary Key:"); //output.writeln(" Foreign Keys:"); output.writeln(string.Format(" Name: {0} Primary Table: {1}.{2} Foreign Table: {3}" ,fk.Name,fk.PrimaryTable.Name,fk.PrimaryKeyName,fk.ForeignTable.Name)); foreach(ArrayList al in uniqueChildren) ShowColumns(al,4,"Unique Index"); } } } */ /* foreach(IForeignKey fk in tbl.ForeignKeys) { if(tbl == fk.PrimaryTable && fk.ForeignTable != fk.PrimaryTable) // Ignore Parent/Child relationships { if(IsInPrimaryKey(fk.ForeignColumns) && IsInPrimaryKey(fk.PrimaryColumns)) // Are the Keys in the Primary Keys { foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) // Look at other relationships { if(IsInPrimaryKey(pk.ForeignColumns) && IsInPrimaryKey(pk.PrimaryColumns)) // Are the Keys in the Primary Keys { if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable != pk.ForeignTable && ForeignRequired(pk)) { WriteLine("Many to Many [{0}] [{1}] [{2}]",fk.PrimaryTable.Name,fk.ForeignTable.Name,pk.PrimaryTable.Name); } } } } } } */ foreach(IForeignKey fk in tbl.ForeignKeys) { foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) // Look at other relationships { if(ManyToMany(tbl,fk,pk)) { WriteLine("Many to Many [{0}] [{1}] [{2}]",fk.PrimaryTable.Name,fk.ForeignTable.Name,pk.PrimaryTable.Name); } } } } private void ShowTable5(ITable tbl) { output.writeln(string.Format("Table {0}",tbl.Name)); ShowProperties(tbl.AllProperties,2); //ShowColumns(tbl.Columns,2,"Columns:"); //ShowColumns(tbl.PrimaryKeys,2,"Primary Key:"); output.writeln(" Foreign Keys:"); foreach(IForeignKey fk in tbl.ForeignKeys) { //if(_selectedTables.Contains(fk.ForeignTable.Name)){ output.writeln(string.Format(" Name: {0} Primary Table: {1}.{2} Foreign Table: {3}" ,fk.Name,fk.PrimaryTable.Name,fk.PrimaryKeyName,fk.ForeignTable.Name)); //ShowColumns(fk.PrimaryColumns,6,"Primary Columns:"); //ShowColumns(fk.ForeignColumns,6,"Foreign Columns:"); //ShowRequiredColumns(fk.ForeignTable.Columns,6,"Required Foreign Columns:"); //ShowFK1(fk); //ShowFK2(fk); CheckFK(fk); //} } } private void ShowTable6a(ITable tbl) { string sPrefix = tbl.Name + "\r\n"; ArrayList fkCols = new ArrayList(); foreach(IForeignKey fk in tbl.ForeignKeys) { WriteLine("fk - {0} {1}",fk.Name,fk.ForeignTable.Name); if(fk.ForeignTable != fk.PrimaryTable) { foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable != pk.ForeignTable) { foreach(IColumn col in pk.ForeignColumns){ if(!col.IsNullable){ WriteLine("Adding {0}", col.Name); fkCols.Add(col); } } } } } bool bManyToMany = true; if(fkCols.Count > 0){ // Here it is string sFkKeysTypes = FormatColumns("{!type} {!local}",fkCols,", "); string sFkKeys = FormatColumns("{!local}",fkCols,", "); string reqKeysTypes = ""; string sep2=""; bool bParentRef=false; foreach(IColumn column in fk.ForeignTable.Columns) { if(IsRequired(column) && !column.IsComputed && !column.IsAutoKey) { if(!IsIn(column,fk.ForeignColumns)) { WriteLine("Adding1 {0}", column.Name); reqKeysTypes+=sep2+FormatColumn("{!type} {!local}",column); sep2=", "; } else { if(!bParentRef && FKParentFK(_workingTable) == fk){ WriteLine("Adding2 {0}", column.Name); bParentRef=true; reqKeysTypes=FormatColumn("{ParentType}",column)+sep2+reqKeysTypes; sep2=", "; } } } } WriteLine("Add - {0}",reqKeysTypes); WriteLine("Check - {0}",sFkKeys); WriteLine("Contains - {0}",sFkKeysTypes); } } } private void ShowTable6b(ITable tbl) // Refresh Logic { Hashtable dicAlias = new Hashtable(); foreach(IForeignKey fk in tbl.ForeignKeys) // 20070220 { if(fk.PrimaryTable != fk.ForeignTable) // Parent Child { if(!IsPrimaryKey(fk) && tbl == fk.PrimaryTable){ // Need to determine if the PrimaryKey for the Foreign Table includes The Primary Key from this Table string sAlias = GetAlias(dicAlias,fk.ForeignTable); string sItem = ClassName(fk.ForeignTable); string sFItem = ClassName(tbl) + ClassName(fk.ForeignTable) + sAlias; string sFItems = ClassName(tbl) + ClassesName(fk.ForeignTable) + sAlias; //sDeclare += "\r\n\t\tprivate List<" + sFItem + "> _Refresh" + sFItems + " = new List<" + sFItem + ">();"; //sReset += "\r\n\t\t\t_Refresh" + sFItems + " = new List<" + sFItem + ">();"; //sRefreshRelated += ", refresh" + sFItems; //sRefreshRelated1 += ", _Refresh" + sFItems; //sRefreshDeclare += ", List<" + sFItem + "> refresh" + sFItems; //sCheck += "\r\n\t\t\tif (" + MemberName(sFItems) + ".IsDirty)\r\n\t\t\t{\r\n\t\t\t\tforeach (" + sFItem + // " tmp in " + MemberName(sFItems) + ")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(tmp.IsDirty)refresh" + sFItems + // ".Add(tmp);\r\n\t\t\t\t}\r\n\t\t\t}"; string sProcess = "\r\n\t\t\tforeach (" + sFItem + " tmp in _Refresh" + sFItems + ")\r\n\t\t\t{\r\n\t\t\t\t" + sItem + "Info.Refresh(this,tmp);\r\n\t\t\t}"; WriteLine("{0}-{1} in {2}",ForeignPrimary(fk),sFItem,sFItems); } } } } private void ShowTable6(ITable tbl) // Refresh Logic { foreach(IForeignKey fk in tbl.ForeignKeys) // 20070220 { WriteLine("FK - {0}", fk.Name); string sepu=""; string sUpdate=""; string sTimestamp=""; foreach(IColumn column in fk.ForeignTable.Columns) { if(column.DataTypeName=="timestamp") sTimestamp=FormatColumn("{member} = ",column); if(!IsIn(column,fk.ForeignColumns)) { string sRef = ParentRef(column); if(sRef==null) { if(column.IsComputed || column.IsAutoKey) sRef=FormatColumn("ref {?dbprefix}{member}{?dbsuff}",column); else { //if(column.IsInPrimaryKey) // sRef=FormatColumn("/*--->1*/{?dbprefix}{!membercolumn}{?dbsuff}",column);// 20070323 //else if(FormatColumn("{!type}",column)==ClassName(fk.ForeignTable)) sRef=FormatColumn("{?dbprefix}{!membercolumn}{?dbsuff}",column);// 20070323 else sRef=FormatColumn("{?dbprefix}{!member}{?dbsuff}",column);// 20070323 } } sUpdate+=sepu + sRef; sepu=", "; } else { string sRef; if(IsRelObj(column)) sRef = FormatColumn("{?dbprefix}{!local}{?dbsuff}",column); else sRef = FormatColumn("{?dbprefix}{rmember}{?dbsuff}",RelatedColumn(column,fk)); sUpdate+=sepu + sRef; sepu=", "; } } WriteLine(" sUpdate - {0}",sUpdate); string sKeysTypesI=""; string sKeysI=""; string sValuesI=""; string sepi=""; ITable ftbl = fk.ForeignTable; ITable tmpTbl = _workingTable; _workingTable = ftbl; foreach(IColumn column in ftbl.Columns) { if((!column.IsComputed)) { if(!column.IsAutoKey){ sValuesI+=FormatColumn("\r\n\t\t\t\t\t{ifLogicL}cm.Parameters.AddWithValue(\"{@}\", {parent}{?dbtype});",column); } if(IsParentCol(column)){ sKeysTypesI+=sepi + _className + " parent"; sKeysI+=sepi + "parent"; } else { sKeysTypesI+=sepi + FormatColumn("{?ref}{!type} {!local}",column); sKeysI+=sepi + FormatColumn("{?ref}{member}",column); } sepi=", "; } } _workingTable=tmpTbl; WriteLine(" KeysTypesI {0}",sKeysTypesI); } } private void ShowInternalRelated(ITable tbl) { foreach(IForeignKey fk in tbl.ForeignKeys) { if(fk.PrimaryTable == fk.ForeignTable) { WriteLine("{0} - {1}",fk.PrimaryTable.Name,fk.ForeignColumns[0].Name); } } } private void ShowAlias(ITable tbl) { foreach(IForeignKey fk in tbl.ForeignKeys) { string s = GetAlias(fk); if(s != "") { WriteLine("{0} - {1}{2}{3}",tbl.Name,ClassName(fk.PrimaryTable),fk.ForeignTable.Name,s ); } } } private void ShowNames(ITable tbl) { WriteLine("{0} Singular {1} - Plural {2}",tbl.Name,SingularName(tbl.Name),PluralName(tbl.Name) ); foreach(IColumn col in tbl.Columns) { WriteLine(" {0} Singular {1} - Plural {2}",col.Name,SingularName(col.Name),PluralName(col.Name) ); } } private void ShowTable7a(ITable tbl) { foreach(IForeignKey fk in tbl.ForeignKeys) { foreach(IColumn column in fk.ForeignTable.Columns) { if(!IsIn(column,fk.ForeignColumns)) { if(IsRequired(column) && !column.IsComputed && !column.IsAutoKey) { if(column.ForeignKeys.Count==1) { try{ IColumn colf = RelatedColumnF(column,fk); IColumn colp = RelatedColumnP(column,fk); WriteLine("'{0}','{1}','{2}','{3}','{4}','{5}'", tbl.Name, RelatedObject(fk,column), RelatedObjectType(column), RelatedObjectType2(fk,column), colf, colp); } catch(Exception) { WriteLine("Exception"); } //WriteLine("RelatedObject - {0}",RelatedObject(fk,column)); //WriteLine("RelatedObject - {0}",RelatedObjectType2(fk,column)); // 20070301 //if(!column.IsInForeignKey){ // WriteLine(FormatColumn("\t\t\t{member} = {local};",column)); //} //else //{ // IForeignKey pk = column.ForeignKeys[0]; // IColumn colf = RelatedColumnF(column,pk); // WriteLine(FormatColumn("{rmember}",colf)); //} } } } } } } private void ShowTable7b(ITable tbl) { foreach(IColumn column in tbl.Columns) { if(!column.IsComputed && !column.IsAutoKey) // Exclude computed and Identity Columns { if(!column.IsInPrimaryKey) // Exclude Primary Key { if(column.ForeignKeys.Count==1) // Look for a Foreign Key on a field { IForeignKey fk = column.ForeignKeys[0]; if(fk.PrimaryTable.Name != fk.ForeignTable.Name) { try { IColumn colf = RelatedColumnF(column,fk); WriteLine("'{0}','{1}','{2}','{3}'", tbl.Name, RelatedObjectType2(fk,column), colf.Name, column.Name); } catch(Exception) { WriteLine("Exception"); } } } } } } } private void ShowTable7(ITable tbl) { foreach(IColumn col in tbl.Columns) { IForeignKey fk = RelObjFK(col); string typ=RelObjType(col); string prop=RelObjProp(col); WriteLine(" {0} {1} {2} {3}",col.IsComputed,col.IsAutoKey,col.IsInPrimaryKey,col.ForeignKeys.Count); WriteLine("{0} '{1}','{2}','{3}','{4}','{5}','{6}'" ,(IsRelObj(col)?"* ":" ") ,tbl.Name ,col.Name ,typ ,prop ,MemberName(prop) ,LocalName(prop) ); output.writeln(FormatColumn("'{tbl}','{ctype}','{prop}','{!type}','{!prop}','{!member}','{!localcolumn}'",col)); } } private void ShowTable8(ITable tbl)// Shows One to Many and One to One { if(OneToOne(tbl))WriteLine("{0}", tbl.Name); } private void ShowTable9(ITable tbl)// Shows One to Many and One to One { // Loop through Foreign Keys; foreach(IForeignKey fk in tbl.ForeignKeys) { // Check the indexes for each part of the Foreign Key //CheckIndex(fk.PrimaryTable,fk.PrimaryColumns); CheckIndex(fk); } } private bool DoesContain(IColumns cols,IColumn col) { foreach(IColumn cc in cols) if(cc.Name==col.Name)return true; return false; } private void CheckIndex(IForeignKey fk) { ITable tbl = fk.ForeignTable; IColumns cols = fk.ForeignColumns; bool InIndex = true; // Check the primary keys first foreach(IColumn col in cols) { InIndex = InIndex && col.IsInPrimaryKey; } if(InIndex)return; string sIndexName = "IX_" + tbl.Name + FormatColumns("{prop}",cols,"_",""); foreach(IIndex ind in tbl.Indexes) { InIndex = true; //WriteLine("{0} - {1} Existing Index {2} - {3}",tbl.Name,fk.Name,ind.Name,FormatColumns("{prop}",ind.Columns,", ","")); //foreach(IColumn col in cols) //{ // //WriteLine(" Index {0} ({1}) {2} {3}",ind.Name,FormatColumns("{prop}",ind.Columns,", ",""),(DoesContain(ind.Columns,col)?"Contains":"Doesn't Contain"),col.Name); // InIndex = InIndex && DoesContain(ind.Columns,col); //} for(int i = 0; i < cols.Count; i++) { //WriteLine(" Index {0} ({1}) {2} {3}",ind.Name,FormatColumns("{prop}",ind.Columns,", ",""),(DoesContain(ind.Columns,col)?"Contains":"Doesn't Contain"),col.Name); InIndex = InIndex && (ind.Columns[i].Name == cols[i].Name); } if(InIndex) { return; if(ind.Name == sIndexName)return; if(!dicDrop.ContainsKey(ind.Name)) { WriteLine("DROP INDEX {0} ON [dbo].[{1}]",ind.Name,tbl.Name); dicDrop.Add(ind.Name,ind.Name); } break; } } // WriteLine("Needs Index {0} - {1} - ({2})",tbl.Name,fk.Name,FormatColumns("{prop}",cols,", ","")); if (dicIndexes.ContainsKey(sIndexName))return; WriteLine("CREATE NONCLUSTERED INDEX {0} ON [dbo].[{1}]\r\n\t({2})",sIndexName,tbl.Name,FormatColumns("{prop}",cols,", ","")); dicIndexes.Add(sIndexName,sIndexName); } private void ShowFK1(IForeignKey fk) { string slName=LocalName(ClassName(fk.ForeignTable)); ArrayList fkCols = new ArrayList(); output.write("\r\n// FK.P " + fk.PrimaryTable.Name + " FK.F " +fk.ForeignTable.Name); foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { output.write("\r\n// PK.P " + pk.PrimaryTable.Name + " PK.F " +pk.ForeignTable.Name); if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable.Name != pk.ForeignTable.Name) { foreach(IColumn col in pk.ForeignColumns){ output.write("\r\n// col " + col.Name + " IsInPrimaryKey " + col.IsInPrimaryKey.ToString()); //if(col.IsInPrimaryKey) fkCols.Add(col); } } } //bool bManyToMany = true; if(fkCols.Count == 0){ //bManyToMany = false; %> // One To Many<% foreach(IColumn col in fk.ForeignTable.PrimaryKeys) { fkCols.Add(col); } } else { %> // Many To Many<% } //string sFkKeysTypes = FormatColumns("{ctype} {local}",fkCols,", "); //string sFkKeys = FormatColumns("{local}",fkCols,", "); //string sFkCheck = FormatColumns(slName +".{prop} == {local}",fkCols," && "); //string sReqKeysCheck= ""; string sKeysTypes=""; //string sKeys=""; //string sValues=""; //string sValues2=""; //string sep=""; string sep2=""; //string sep3=""; //string reqKeys=""; //string reqKeysTypes=""; string sValues=""; string sValues2=""; //ArrayList reqCols = new ArrayList(); foreach(IColumn column in fk.ForeignTable.Columns) { //WriteLine("{0} IsRequired {1} IsComputed {2} IsAutoKey {3} IsInfk {4}",column.Name,IsRequired(column), // column.IsComputed,column.IsAutoKey,IsIn(column,fk.ForeignColumns)); if(IsRequired(column) && !column.IsComputed && !column.IsAutoKey) { if(!IsIn(column,fk.ForeignColumns)) { sValues+=sep2+RelatedObject(fk,column); sValues2+=sep2+RelatedObjectType2(fk,column); // 20070301 sKeysTypes+=sep2+FormatColumn("{ctype} {local}",column); sep2=", "; } } } WriteLine("\r\nsKeysTypes='{0}'",sKeysTypes); WriteLine("\r\nsValues='{0}'",sValues); WriteLine("\r\nsValues2='{0}'",sValues2); } public void ShowFK2(IForeignKey fk) { string sInit=""; string sep2=""; Hashtable dicAlias=new Hashtable(); foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable.Name != pk.ForeignTable.Name && pk.Name != fk.Name) { string sAlias = GetAlias(dicAlias,pk.PrimaryTable); sAlias = GetNewAlias(fk,pk); foreach(IColumn column in pk.PrimaryTable.Columns) { string sProp = ClassName(pk.PrimaryTable) + sAlias + "_" + PropertyName(column); string sLocal = LocalName(ClassName(pk.PrimaryTable))+ sAlias; string sMember = MemberName(sProp); if(IsIn(column,pk.PrimaryColumns)) { sInit+=sep2 + "\t\t\t" + MemberName(RelatedColumn(column,pk)) + " = " + sLocal + "." + PropertyName(column) + ";"; sep2="\r\n"; } else { if(pk.PrimaryTable != fk.PrimaryTable) { if(column.DataTypeName != "timestamp"){ if(CSLAType(column)=="SmartDate") sInit+=sep2 + "\t\t\t" + sMember + " = new SmartDate(" + sLocal + "." + PropertyName(column) + ");"; else sInit+=sep2 + "\t\t\t" + sMember + " = " + sLocal + "." + PropertyName(column) + ";"; sep2="\r\n"; } } } } } } WriteLine("\r\nsInit:\r\n{0}",sInit); } public void ShowFK3(IForeignKey fk) { string slName=LocalName(ClassName(fk.ForeignTable)); ArrayList fkCols = new ArrayList(); if(fk.ForeignTable != fk.PrimaryTable) { foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable) { foreach(IColumn col in pk.ForeignColumns){ fkCols.Add(col); } } } } //bool bManyToMany = true; if(fkCols.Count == 0){ //bManyToMany = false; %> // One To Many <% foreach(IColumn col in fk.ForeignTable.PrimaryKeys) { fkCols.Add(col); } } else { %> // Many To Many <% } } private void CheckFK(IForeignKey fk) { string slName=LocalName(ClassName(fk.ForeignTable)); ArrayList fkCols = new ArrayList(); //output.write("\r\n// FK.P " + fk.PrimaryTable.Name + " FK.F " +fk.ForeignTable.Name); if(fk.ForeignTable == fk.PrimaryTable)// Child Relationship { WriteLine(" Child - {0} - Primary {1} - Foreign {2}",fk.Name,fk.PrimaryTable.Name,fk.ForeignTable.Name); } else { // Now determine if the Primary.Columns are Primary Keys WriteLine(" Non-Child - {0} - Primary {1} - Foreign {2}",fk.Name,fk.PrimaryTable.Name,fk.ForeignTable.Name); ShowColumns(fk.PrimaryColumns,6,"PrimaryColumns"); ShowColumns(fk.ForeignColumns,6,"ForeignColumns"); foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { //output.write("\r\n// PK.P " + pk.PrimaryTable.Name + " PK.F " +pk.ForeignTable.Name); string sAlias = GetNewAlias(fk,pk); if(sAlias != "") { WriteLine(" PK - {0} - Primary {1} - Foreign {2}",pk.Name,pk.PrimaryTable.Name,pk.ForeignTable.Name); WriteLine(" Alias - {0}",sAlias); } if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable != pk.ForeignTable) { foreach(IColumn col in pk.ForeignColumns){ //output.write("\r\n// col " + col.Name + " IsInPrimaryKey " + col.IsInPrimaryKey.ToString()); //if(col.IsInPrimaryKey) fkCols.Add(col); } } } } } private void CheckFK2(IForeignKey fk) { string slName=LocalName(ClassName(fk.ForeignTable)); ArrayList fkCols = new ArrayList(); output.write("\r\n// FK.P " + fk.PrimaryTable.Name + " FK.F " +fk.ForeignTable.Name); if(fk.ForeignTable != fk.PrimaryTable) { foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys) { output.write("\r\n// PK.P " + pk.PrimaryTable.Name + " PK.F " +pk.ForeignTable.Name); if(pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable != pk.ForeignTable) { foreach(IColumn col in pk.ForeignColumns){ //output.write("\r\n// col " + col.Name + " IsInPrimaryKey " + col.IsInPrimaryKey.ToString()); //if(col.IsInPrimaryKey) fkCols.Add(col); } } } } // bool bManyToMany = true; if(fkCols.Count == 0){ // bManyToMany = false; foreach(IColumn col in fk.ForeignTable.PrimaryKeys) { fkCols.Add(col); } WriteLine("One to Many fkCols - {0}",FormatColumns("{prop}",fkCols,", ","")); } else { WriteLine("Many to Many fkCols - {0}",FormatColumns("{prop}",fkCols,", ","")); } string sFkKeysTypes = FormatColumns("{ctype} {local}",fkCols,", "); WriteLine("sFkKeysTypes - {0}",sFkKeysTypes); string sFkKeys = FormatColumns("{local}",fkCols,", "); WriteLine("sFkKeys - {0}",sFkKeys); string sFkCheck = FormatColumns(slName +".{prop} == {local}",fkCols," && "); WriteLine("sFkCheck - {0}",sFkCheck); string sReqKeysCheck= ""; string sKeysTypes=""; string sKeys=""; //string sValues=""; //string sValues2=""; //string sep=""; string sep2=""; string sep3=""; string reqKeys=""; string reqKeysTypes=""; ArrayList reqCols = new ArrayList(); ArrayList uniqueChildren = FindUniqueChildren(fk); bool bParentRef = false; foreach(IColumn column in fk.ForeignTable.Columns) { WriteLine("Column {0} IsRequired {1} IsComputed {2} IsAutoKey {3}",column.Name, IsRequired(column), column.IsComputed, column.IsAutoKey); if(IsRequired(column) && !column.IsComputed && !column.IsAutoKey) { // 20070220 // sKeysTypes+=sep+FormatColumn("{ctype} {local}",column); // sKeys+=sep+FormatColumn("{local}",column); if(!IsIn(column,fk.ForeignColumns)) { sKeysTypes+=sep2+FormatColumn("{ctype} {local}",column); sKeys+=sep2+FormatColumn("{local}",column); sReqKeysCheck+=sep3+FormatColumn(slName +".{prop} == {local}",column); reqKeys+=sep2+FormatColumn("{local}",column); reqKeysTypes+=sep2+FormatColumn("{ctype} {local}",column); reqCols.Add(column); sep2=", "; sep3=" && "; } else { if(!bParentRef){ WriteLine("Add a parent reference",sKeysTypes); reqKeys="parent"+sep2+reqKeys; reqKeysTypes=FormatColumn("{ParentType}",column)+sep2+reqKeysTypes; sep2=", "; bParentRef=true; } } //sValues+=sep+RelatedObject(column); //sValues2+=sep+RelatedObjectType(column); //sep=", "; } } string reqKeysContain = (SameList(reqCols,fkCols)?sFkKeys:reqKeys); IList uniqueMatch = FindUnique(uniqueChildren,reqCols); WriteLine("sKeysTypes - {0}",sKeysTypes); WriteLine("sKeys - {0}",sKeys); WriteLine("sReqKeysCheck - {0}",sReqKeysCheck); WriteLine("reqKeys - {0}",reqKeys); WriteLine("reqKeysTypes - {0}",reqKeysTypes); } %><%#FILE NamingConvention.cs%><% %><%#FILE ForeignKeyProcessing.cs%><% %><%#FILE FilteredColumns.cs%><% %><%#FILE FormatColumns.cs%><% %><%#FILE WriteLine.cs%><% } %> ##|BODY_END