Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        private void _SetupComponents(Table Table)
        {
            m_Name = Table.Name;
            var t_Gen = new MultipleStatement(new List <IFileComponentGenerator>
            {
            });

            AddComponentGenerator(t_Gen);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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());
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }