1232 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1232 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ##|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,150,0);
 | |
| 			chkColumns.Checked = false;
 | |
| 			GuiCheckBox chkFKCalc1 = MakeGuiCheckBox( "chkFKCalc1", "FK Calc 1", true, "FK Calc 1" ,150,chkDetail,300,0);
 | |
| 			chkFKCalc1.Checked = false;
 | |
| 			GuiCheckBox chkProc = MakeGuiCheckBox( "chkProc", "Procedures", true, "Procedures" ,150,chkDetail,450,0);
 | |
| 			chkProc.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,150, -1);
 | |
| 			chkFKCalc2.Checked = false;
 | |
| 			GuiCheckBox chkColumns2 = MakeGuiCheckBox("chkColumns2","PrimFK",true,"Primary Foreign Key",150,chkDetail,300, -1);
 | |
| 			chkColumns2.Checked = false;
 | |
| 			GuiCheckBox chkNewFK = MakeGuiCheckBox( "chkNewFK", "NewFK", true, "NewFK" ,150,chkDetail,450,-1);
 | |
| 			chkNewFK.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,150, -2);
 | |
| 			chkOne2One.Checked = false;
 | |
| 			GuiCheckBox chkIndexes = MakeGuiCheckBox("chkIndexes","Indexes",true,"Compare Foreign Keys to Indexes",150,chkDetail,300, -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, 150, -3);
 | |
| 			chkAlias.Checked = false;
 | |
| 			GuiCheckBox chkNames = MakeGuiCheckBox("chkNames","Names",true,"Names",150,chkDetail, 300, -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" );
 | |
| 			chkProc.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;
 | |
| 		GuiCheckBox chkProc = ui["chkProc"] as GuiCheckBox;
 | |
| 		GuiCheckBox chkNewFK = ui["chkNewFK"] 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(chkProc.Checked)status+=", " + chkProc.Text;
 | |
| 		if(chkNewFK.Checked)status+=", " + chkNewFK.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();
 | |
| 		if((bool)input["chkProc"])
 | |
| 		{
 | |
| 			ShowProcs(db);
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			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 );
 | |
| 				if((bool)input["chkNewFK"])ShowNewFK( _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 void ShowProcs(IDatabase db)
 | |
| 	{
 | |
| 		foreach(IProcedure ip in db.Procedures)
 | |
| 		{
 | |
| 			//if(ip.Schema != "sys")
 | |
| 			if(ip.Name=="purgeData" || ip.Name=="ve_GetPath")
 | |
| 			{
 | |
| %>
 | |
| /****** Object:  StoredProcedure [<%=ip.Name%>] Schema <%=ip.Schema%>  Type <%=ip.Type.ToString()%> ******/
 | |
| <%
 | |
| 				bool isFunction=ip.ProcedureText.Contains("CREATE FUNCTION");
 | |
| 				output.writeln(string.Format("IsFunction = {0}",isFunction));
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	private void ShowNewFK(ITable tbl)
 | |
| 	{
 | |
| 	%>NewFK Output:<%=tbl.Name%>
 | |
| <%
 | |
| 			foreach(IForeignKey fk in tbl.ForeignKeys)
 | |
| 			{
 | |
| 				if(tbl.Name == fk.PrimaryTable.Name)
 | |
| 				{
 | |
| %>Foreign Table <%=fk.ForeignTable.Name%> Column <%=fk.ForeignColumns[0].Name%>
 | |
| <%
 | |
| 				}
 | |
| 			}
 | |
| 	}
 | |
| 
 | |
| 	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<colsi.Count;i++)
 | |
| 		{
 | |
| 			if(colsi[i]!=colsp[i])
 | |
| 				return false;
 | |
| 		}
 | |
| 		return true;
 | |
| 	}
 | |
| 	private void ShowRequiredColumns(IColumns cols,int indent,string title)
 | |
| 	{
 | |
| 		output.writeln(string.Format("{0}{1}","".PadRight(indent),title));
 | |
| 		foreach(IColumn col in cols)
 | |
| 		{
 | |
| 			if(IsRequired(col) && !col.IsComputed && !col.IsAutoKey)
 | |
| 			{
 | |
| 				output.writeln(string.Format("{0}{1} {2}{3}{4}","".PadRight(indent+2),col.Name,col.DataTypeNameComplete,
 | |
| 					(col.IsInPrimaryKey?" PK":""),(col.IsInForeignKey?" FK":"")));
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	private void ShowTable1(ITable tbl)
 | |
| 	{
 | |
| 		output.writeln(string.Format("Table {0}",tbl.Name));
 | |
| 		ShowProperties(tbl.AllProperties,2);
 | |
| 		ShowColumns(tbl.Columns,2,"Columns:");
 | |
| 		IList makeList = MakeList(tbl.Columns);
 | |
| 		ShowColumns(makeList,2,"MakeList:");
 | |
| 		IList makeList2 = MakeList2(tbl.Columns);
 | |
| 		ShowColumns(makeList2,2,"MakeList2:");
 | |
| 		IList makeList3 = MakeList3(tbl.Columns);
 | |
| 		ShowColumns(makeList3,2,"MakeList3:");
 | |
| 		IList makeList4 = MakeList4(tbl.Columns);
 | |
| 		ShowColumns(makeList4,2,"MakeList4:");
 | |
| 		ShowColumns(tbl.PrimaryKeys,2,"Primary Key:");
 | |
| 		output.writeln("  Foreign Keys:");
 | |
| 		foreach(IForeignKey fk in tbl.ForeignKeys)
 | |
| 		{
 | |
| 			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:");
 | |
| 		}
 | |
| 		output.writeln("  Unique Indexes:");
 | |
| 		foreach(IIndex ind in tbl.Indexes)
 | |
| 		{
 | |
| 			if(!IsPrimaryKey(ind) && ind.Unique)
 | |
| 			{
 | |
| 				output.writeln(string.Format("    Name: {0} ",ind.Name));
 | |
| 				ShowProperties(ind.AllProperties,6);
 | |
| 				ShowColumns(ind.Columns,6,"Columns:");		
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	private void ShowTable2(ITable tbl)
 | |
| 	{
 | |
| 		output.writeln(string.Format("Table {0}",tbl.Name));
 | |
| 		ShowProperties(tbl.AllProperties,2);
 | |
| 		ShowColumns(tbl.Columns,2,"Columns:");
 | |
| 	}
 | |
| 	private void ShowTable3(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);
 | |
| 				ShowFK3(fk);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	private bool IsInPrimaryKey(IColumns cols)
 | |
| 	{
 | |
| 		foreach(IColumn col in cols)
 | |
| 		{
 | |
| 			if(!col.IsInPrimaryKey)return false;
 | |
| 		}
 | |
| 		return true;
 | |
| 	}
 | |
| 	private void ShowTable4(ITable tbl)
 | |
| 	{
 | |
| /*
 | |
| 		foreach(IForeignKey fk in tbl.ForeignKeys)
 | |
| 		{
 | |
| 			if(_selectedTables.Contains(fk.ForeignTable.Name)){
 | |
| 				ArrayList uniqueChildren = FindUniqueChildren(fk);
 | |
| 				if(uniqueChildren.Count > 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
 | 
