private IFileComponentGenerator _GenerateRead(Table Table) { var t_Columns = Table.Columns.Select(KV => KV.Value); var t_ColumnsText = string.Join(",", t_Columns.Select(K => K.Name)); var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new VariableScriptBlock("_READ", new List <IFileComponentGenerator> { new Statement($"$Reader = [System.Data.SqlClient.SqlCommand]::new(\"SELECT {t_ColumnsText} FROM {Table.Name};\", $this.Connection).ExecuteReader();"), new Statement("$DTOs = @();"), new Statement("while ($Reader.Read() -eq $true)"), new ScriptBlock(new List <IFileComponentGenerator> { new Statement($"$DTO = New-{Table.Name}DTO;"), new MultipleStatement ( t_Columns.Select(C => new Statement($"$DTO.{C.Name} = $Reader[\"{C.Name}\"];")).ToList <IFileComponentGenerator>() ), new Statement("$DTOs += $DTO;") }), new Statement("return $DTOs;") }) }); return(t_Gen); }
private string _GenerateContext(Schema Schema) { var t_FileGenerator = new MultipleStatement( new List <IFileComponentGenerator> { new FunctionDef($"New-StorageContext", new List <PowershellVariableDef> { new PowershellVariableDef { DataType = "System.Data.SqlClient.SqlConnection", Name = "Con" } }, new List <IFileComponentGenerator> { new Statement("$_CONTEXT = New-Object -TypeName psobject"), new Statement("$_CONTEXT | Add-Member -MemberType NoteProperty -Name Connection -Value $Con"), new MultipleStatement ( Schema.Tables.Select ( T => new Statement($"$_CONTEXT | Add-Member -MemberType NoteProperty -Name {T.Name} -Value $(New-{T.Name}DTORepository($Con))") ) .ToList <IFileComponentGenerator>() ), new Statement("return $_CONTEXT;") }) }); return(t_FileGenerator.Generate()); }
private void _SetupComponents(Table Table) { m_Name = Table.Name; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new FunctionDef($"New-{Table.Name}DTO", new List <IFileComponentGenerator> { new MultipleStatement(new List <IFileComponentGenerator> { new Block(1, new List <IFileComponentGenerator> { new Statement("$_OBJ = New-Object -TypeName PSObject") } .Concat( Table.Columns.Select(KV => new Statement($"$_OBJ | Add-Member -MemberType NoteProperty -Name {KV.Value.Name} -Value {new TypeDef(KV.Value.Type).DefaultValue}")) ) .Concat(new List <IFileComponentGenerator> { new Statement("return $_OBJ;") }).ToList() ) }) }) }); AddComponentGenerator(t_Gen); }
private void _SetupComponents(Table Table) { m_Name = Table.Name; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new FunctionDef($"New-{Table.Name}DTORepository", new List <PowershellVariableDef> { new PowershellVariableDef { DataType = m_SqlConnectionType, Name = "Con" } }, new List <IFileComponentGenerator> { new Block(1, new List <IFileComponentGenerator> { _GenerateCreate(Table), _GenerateRead(Table), _GetUniqueColumn(Table) == null ? new Statement("### NO UNIQUE COLUMN FOUND FOR UPDATE FUNCTION ###") : _GenerateUpdate(Table), _GetUniqueColumn(Table) == null ? new Statement("### NO UNIQUE COLUMN FOUND FOR DELETE FUNCTION ###") : _GenerateDelete(Table), new Statement("$_REPO = New-Object -TypeName psobject"), new Statement("$_REPO | Add-Member -MemberType NoteProperty -Name Connection -Value $Con"), new Statement("$_REPO | Add-Member -MemberType ScriptMethod -Name Create -Value $_CREATE"), new Statement("$_REPO | Add-Member -MemberType ScriptMethod -Name Read -Value $_READ"), _GetUniqueColumn(Table) == null ? new Statement("") : new Statement("$_REPO | Add-Member -MemberType ScriptMethod -Name Update -Value $_UPDATE"), _GetUniqueColumn(Table) == null ? new Statement("") : new Statement("$_REPO | Add-Member -MemberType ScriptMethod -Name Delete -Value $_DELETE"), new Statement("return $_REPO;") }) }) }); AddComponentGenerator(t_Gen); }
private void _SetupComponents(Table Table) { m_Name = Table.Name; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { }); AddComponentGenerator(t_Gen); }
private void _SetupComponents(Table Table) { var t_References = Table.Columns.Where(KV => KV.Value.Reference != null).Select(KV => KV.Value.Reference).Where(R => R.Type == COLUMN_REFERENCE_TYPE.SOURCE_TO_DESTINATION); var t_ReferencedBy = Table.Columns.Where(KV => KV.Value.Referenced.Count > 0).SelectMany(KV => KV.Value.Referenced).Where(R => R.Type == COLUMN_REFERENCE_TYPE.DESTINATION_TO_SOURCE); m_Name = Table.Name; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new Statement("/* COMPUTER GENERATED CODE */"), new Statement("#pragma once"), new IncludeUserDef("ISqlContract"), new IncludeUserDef(Table.Name + "DTO"), new IncludeDef("string"), new IncludeDef("vector"), new IncludeDef("memory"), new IncludeDef("functional"), new Block(0, t_References.Concat(t_ReferencedBy).Select(R => new IncludeUserDef(R.Table.Name + "DTO")).ToList <IFileComponentGenerator>()), new ClassDef(Table.Name + "DTORepository", new List <IFileComponentGenerator> { new ClassPrivateDef(new List <IFileComponentGenerator> { new VariableAssignmentDef(new VariableDef("m_DB", new UDTTemplate("std::shared_ptr", "ISqlContract")), "nullptr"), new Block(1, t_References.Concat(t_ReferencedBy) .Select(R => new VariableAssignmentDef(new VariableDef("m_" + R.Table.Name, new UDTTemplate("std::unique_ptr", R.Table.Name + "DTORepository")), "nullptr")) .ToList <IFileComponentGenerator>() ) }), new ClassPublicDef(new List <IFileComponentGenerator> { new ConstructorDef(Table.Name + "DTORepository", new List <VariableDef> { new VariableDef("DB", new UDTTemplate("std::shared_ptr", "ISqlContract")) }, new List <IFileComponentGenerator> { new AssignmentDef(new VariableDef("m_DB", new UDT("")), "DB"), new Block(1, t_References.Concat(t_ReferencedBy) .Select(R => new VariableAssignmentDef(new VariableDef("m_" + R.Table.Name, new UDTTemplate("std::unique_ptr", R.Table.Name + "DTORepository")), $"std::make_unique<{R.Table.Name}DTORepository>(DB);")) .ToList <IFileComponentGenerator>() ) }) }) }) }); AddComponentGenerator(t_Gen); }
private void _SetupComponents(Table Table) { var t_References = Table.Columns.Where(KV => KV.Value.Reference != null).Select(KV => KV.Value.Reference).Where(R => R.Type == COLUMN_REFERENCE_TYPE.SOURCE_TO_DESTINATION); var t_ReferencedBy = Table.Columns.Where(KV => KV.Value.Referenced.Count > 0).SelectMany(KV => KV.Value.Referenced).Where(R => R.Type == COLUMN_REFERENCE_TYPE.DESTINATION_TO_SOURCE); m_Name = Table.Name; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new Statement("/* COMPUTER GENERATED CODE */"), new Statement("#pragma once"), new IncludeDef("string"), new IncludeDef("vector"), new Block(0, t_References.Concat(t_ReferencedBy).Select(R => new IncludeUserDef(R.Table.Name + "DTO")).ToList <IFileComponentGenerator>()), new ClassDef(Table.Name + "DTO", new List <IFileComponentGenerator> { new ClassPublicDef ( new List <IFileComponentGenerator> { new Block(1, Table.Columns .OrderBy(C => C.Key) .Select(C => new VariableAssignmentDef ( new VariableDef(C.Value.Name, new TypeDef(C.Value.Type)), new TypeDef(C.Value.Type).DefaultValue )) .ToList <IFileComponentGenerator>() ), new Block(1, t_References.Concat(t_ReferencedBy) .Where(R => R.Relationship == COLUMN_REFERENCE_RELATIONSHIP.ONE) .Select(R => new VariableAssignmentDef(new VariableDef(R.Table.Name, new UDT(R.Table.Name + "DTO")))) .ToList <IFileComponentGenerator>() ), new Block(1, t_References.Concat(t_ReferencedBy) .Where(R => R.Relationship == COLUMN_REFERENCE_RELATIONSHIP.MANY) .Select(R => new VariableAssignmentDef(new VariableDef(R.Table.Name, new UDT($"std::vector<{R.Table.Name + "DTO"}>")))) .ToList <IFileComponentGenerator>() ) } ) }) }); AddComponentGenerator(t_Gen); }
private IFileComponentGenerator _GenerateDelete(Table Table) { var t_Unique = _GetUniqueColumn(Table); var t_DeleteQuery = $"DELETE FROM [{Table.Name}] WHERE [{t_Unique.Name}] = " + (t_Unique.Type == COLUMN_DATA_TYPE.STRING ? $"'$($DTO.{t_Unique.Name})'" : $"$($DTO.{t_Unique.Name})") + ";"; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new VariableScriptBlock("_DELETE", new List <IFileComponentGenerator> { new Block(2, new List <IFileComponentGenerator> { new Statement("param($DTO)"), new Statement($"$Cmd = [{m_SqlCommandType}]::new(\"{t_DeleteQuery}\",$this.Connection);"), new Statement("$Cmd.ExecuteNonQuery();") }) }) }); return(t_Gen); }
private string _GenerateRepo(Table Table) { var t_File = new MultipleStatement(new List <IFileComponentGenerator> { new FunctionDef($"New-{Table.Name}DTORepository", new List <PowershellVariableDef> { new PowershellVariableDef { DataType = "System.Data.SQLite.SQLiteConnection", Name = "Con" } }, new List <IFileComponentGenerator> { _GenerateRead(Table), new Statement("$_REPO = New-Object -TypeName psobject"), new Statement("$_REPO | Add-Member -MemberType NoteProperty -Name Connection -Value $Con"), new Statement("$_REPO | Add-Member -MemberType ScriptMethod -Name Read -Value $_READ"), new Statement("return $_REPO;") }) }); return(t_File.Generate()); }
private void _SetupComponents(Table Table) { m_Name = Table.Name; var t_Gen = new MultipleStatement ( new List <IFileComponentGenerator> { new Statement("/* AUTOMATICALLY GENERATED CODE */"), new UsingDef("System"), new ClassDef(Table.Name, new List <IFileComponentGenerator> { new MultipleStatement ( Table.Columns.OrderBy(P => P.Key).Select(P => new PropertyDef(new VariableDef(P.Value.Name, new TypeDef(P.Value.Type)))) .ToList <IFileComponentGenerator>() ) }) } ); AddComponentGenerator(t_Gen); }
private IFileComponentGenerator _GenerateUpdate(Table Table) { var t_Unique = _GetUniqueColumn(Table); var t_Columns = Table.Columns.Select(KV => KV.Value).Where(C => C != t_Unique); var t_ColumnText = string.Join(",", t_Columns.Select(C => $"[{C.Name}] = " + (C.Type == COLUMN_DATA_TYPE.STRING ? $"'$($DTO.{C.Name})'" : "$($DTO.{C.Name})"))); var t_InsertQuery = $"UPDATE [{Table.Name}] SET {t_ColumnText} WHERE [{t_Unique.Name}] = $($DTO.{t_Unique.Name});"; var t_Gen = new MultipleStatement(new List <IFileComponentGenerator> { new VariableScriptBlock("_UPDATE", new List <IFileComponentGenerator> { new Block(2, new List <IFileComponentGenerator> { new Statement("param($DTO)"), new Statement($"$Cmd = [{m_SqlCommandType}]::new(\"{t_InsertQuery}\",$this.Connection);"), new Statement("$Cmd.ExecuteNonQuery();") }) }) }); return(t_Gen); }