Ejemplo n.º 1
0
        protected override void DoRun(IJobRunEnv env)
        {
            using (StreamWriter sw = new StreamWriter(File))
            {
                CSharpWriter csw = new CSharpWriter(sw);
                csw.WriteLine("// ***********************************************************************");
                csw.WriteLine("// This code was generated by DatAdmin DB MODEL Plugin, please do not edit");
                csw.WriteLine("// ***********************************************************************");
                csw.WriteLine("using System.Data.Common;");
                csw.Begin("namespace {0}", NamespaceName);
                csw.Begin("public static class {0}", ClassName);

                csw.WriteLine("public static string DBVERSION = {0};", CSharpWriter.StringLiteral(m_versionDb.Versions.Last().Name));

                csw.Begin("private static void ExecuteNonQuery(DbConnection conn, DbTransaction tran, string sql)");
                csw.Begin("using (DbCommand cmd = conn.CreateCommand())");
                csw.WriteLine("cmd.CommandText = sql;");
                csw.WriteLine("cmd.Transaction = tran;");
                csw.WriteLine("cmd.ExecuteNonQuery();");
                csw.End(); // using
                csw.End(); // function

                csw.Begin("public static string GetVersion(DbConnection conn, DbTransaction tran)");
                csw.Begin("try");
                csw.Begin("using (DbCommand cmd = conn.CreateCommand())");
                csw.WriteLine("cmd.Transaction = tran;");
                csw.WriteLine("cmd.CommandText = {0};", CSharpWriter.StringLiteral(m_versionDb.m_props.GetVersionSql));
                csw.WriteLine("return cmd.ExecuteScalar().ToString();");
                csw.End(); // using
                csw.End(); // try
                csw.Begin("catch");
                csw.WriteLine("return null;");
                csw.End(); // catch
                csw.End(); // function

                int vindex = 0;
                foreach (var vd in m_versionDb.Versions)
                {
                    csw.WriteLine("// update to version {0}", vd.Name);
                    csw.Begin("private static void UpdateToVersion_{0}(DbConnection conn, DbTransaction tran)", vindex);
                    foreach (string sql in vd.GetAlterSqls())
                    {
                        csw.WriteLine("ExecuteNonQuery(conn, tran, {0});", CSharpWriter.StringLiteral(sql));
                    }
                    csw.End();
                    vindex++;
                }

                csw.Begin("public static void UpdateDb(DbConnection conn)");
                if (UseTransaction)
                {
                    csw.Begin("using (DbTransaction tran = conn.BeginTransaction())");
                    csw.Begin("try");
                }
                else
                {
                    csw.WriteLine("DbTransaction tran = null;");
                }
                for (int i = 0; i < m_versionDb.Versions.Count; i++)
                {
                    if (i == 0)
                    {
                        csw.WriteLine("if (GetVersion(conn, tran) == null) UpdateToVersion_0(conn, tran);");
                    }
                    else
                    {
                        csw.WriteLine("if (GetVersion(conn, tran) == {0}) UpdateToVersion_{1}(conn, tran);", CSharpWriter.StringLiteral(m_versionDb.Versions[i - 1].Name), i);
                    }
                }
                if (UseTransaction)
                {
                    csw.End(); // try
                    csw.Begin("catch");
                    csw.WriteLine("tran.Rollback();");
                    csw.WriteLine("throw;");
                    csw.End(); // catch
                    csw.WriteLine("tran.Commit();");
                    csw.End(); // using
                }
                csw.End();     // function Run

                csw.Begin("public static void CheckVersion(DbConnection conn)");
                csw.WriteLine("string realversion = GetVersion(conn, null);");
                csw.Begin("if (realversion != DBVERSION)");
                csw.WriteLine("throw new Exception(String.Format(\"Bad version of database, code_version={0}, db_version={1}\", DBVERSION, realversion));");
                csw.End(); // if
                csw.End(); //  CheckVersion

                csw.End(); // class
                csw.End(); // namespace
            }
        }