示例#1
0
        private void RunCleanup()
        {
            foreach (IRelation r in Model.Relations)
            {
                if (r.Persistence.Persisted)
                {
                    cleaner.WriteDropForeignKey(r, environment);
                    cleaner.WriteSeparator();
                }
            }

            cleaner.WriteLine();
            foreach (IEntity en in Model.Entities)
            {
                if (en.Persistence.Persisted)
                {
                    cleaner.WriteDropTable(en, environment);
                    cleaner.WriteSeparator();
                }
            }

            cleaner.WriteLine();
            foreach (IGenerator gen in Model.Generators)
            {
                cleaner.WriteDropSequence(gen, environment);
                cleaner.WriteSeparator();
            }
        }
示例#2
0
        private void ProcessSchemas()
        {
            List <string> schemas = new List <string>();

            foreach (IEntity entity in Model.Entities)
            {
                if (!schemas.Contains(entity.Persistence.Schema))
                {
                    schemas.Add(entity.Persistence.Schema);
                }
            }

            if (createSchema)
            {
                foreach (string schemaName in schemas)
                {
                    WriteSchema(schemaName);
                    updater.WriteLine();
                }
            }

            string sql = String.Format("ALTER SESSION SET current_schema={0}", schemas[0]);

            WriteExecImmediat(sql);
            creator.WriteLine(sql);
            creator.WriteSeparator();
        }
示例#3
0
        private void ProcessUpdateAttributes(IEntity entity, IAttributes attributes)
        {
            foreach (IAttribute a in attributes)
            {
                if (a.Persistence.Persisted)
                {
                    ICodeWriterPlSql sql = Model.Lamp.CodeWritersFactory.CreateCodeWriterPlSql();
                    updater.WriteLine("SELECT count(*) INTO {0} FROM ALL_TAB_COLUMNS WHERE OWNER='{1}' AND TABLE_NAME='{2}' AND COLUMN_NAME='{3}' AND ROWNUM=1;",
                                      VarNameFoundCount,
                                      entity.Persistence.Schema,
                                      entity.Persistence.Name,
                                      a.Persistence.Name);
                    updater.If("{0} <> 1", VarNameFoundCount);

                    sql.WriteLine("ALTER TABLE {0} ADD ", entity.Persistence.FullName);
                    sql.Indent++;
                    sql.WriteLine("{0} {1} NULL",
                                  a.Persistence.Name,
                                  environment.ToTypeName(a, false));
                    WriteExecImmediat(sql);
                    string updateColSql = sql.ToString(true);

                    if (a.TypeDefinition.Required && a.TypeDefinition.HasDefault)
                    {
                        sql.ClearAll();
                        sql.WriteLine("UPDATE {0} SET {1}={2}",
                                      entity.Persistence.FullName,
                                      a.Persistence.Name,
                                      environment.ToDefaultValue(a));
                        WriteExecImmediat(sql);
                        updateColSql = updateColSql + Environment.NewLine + sql.ToString(true);

                        sql.ClearAll();
                        sql.WriteLine("ALTER TABLE {0} MODIFY ({1} NOT NULL)",
                                      entity.Persistence.FullName,
                                      a.Persistence.Name);
                        WriteExecImmediat(sql);
                        updateColSql = updateColSql + Environment.NewLine + sql.ToString(true);
                    }
                    updater.EndIf();

                    genie.Config.NotifyAssistants("Update", a, updateColSql);
                }
            }
            updater.WriteLine();
        }
示例#4
0
        private void WriteSchema(string name)
        {
            updater.WriteLine("SELECT count(*) INTO {0} FROM ALL_USERS WHERE USERNAME='******' AND ROWNUM=1;",
                              VarNameFoundCount, name);
            updater.If("{0} <> 1", VarNameFoundCount);

            ICodeWriterPlSql sql = Model.Lamp.CodeWritersFactory.CreateCodeWriterPlSql();

            sql.WriteLine("CREATE USER {0}", name);
            sql.Indent++;
            sql.WriteLine("IDENTIFIED BY {0}", schemaPassword);
            sql.WriteLine("DEFAULT TABLESPACE {0}", schemaDefaultTablespace);
            sql.WriteLine("TEMPORARY TABLESPACE {0}", schemaTempTablespace);
            sql.WriteLine("ACCOUNT UNLOCK");
            WriteExecImmediat(sql);
            creator.WriteFrom(sql);
            creator.WriteSeparator();

            if (schemaGrantDba)
            {
                WriteExecImmediat(creator.WriteLine("GRANT DBA TO {0}", name));
                creator.WriteSeparator();
            }

            WriteExecImmediat(creator.WriteLine("GRANT SELECT ANY TABLE TO {0}", name));
            creator.WriteSeparator();
            WriteExecImmediat(creator.WriteLine("GRANT UPDATE ANY TABLE TO {0}", name));
            creator.WriteSeparator();
            WriteExecImmediat(creator.WriteLine("GRANT INSERT ANY TABLE TO {0}", name));
            creator.WriteSeparator();
            WriteExecImmediat(creator.WriteLine("GRANT DELETE ANY TABLE TO {0}", name));
            creator.WriteSeparator();
            WriteExecImmediat(creator.WriteLine("GRANT EXECUTE ANY TABLE TO {0}", name));
            creator.WriteSeparator();
            WriteExecImmediat(creator.WriteLine("GRANT SELECT ANY TABLE TO {0}", name));
            creator.WriteSeparator();

            updater.EndIf();
        }
示例#5
0
        private void BeginScripting()
        {
            updater.WriteStdHeader(genie);
            creator.WriteStdHeader(genie);
            cleaner.WriteStdHeader(genie);

            updater.WriteLine("SET SERVEROUTPUT ON;");
            updater.WriteLine("WHENEVER SQLERROR EXIT FAILURE ROLLBACK;");
            updater.WriteLine("WHENEVER OSERROR EXIT FAILURE ROLLBACK;");
            updater.WriteLine("DECLARE");
            updater.Indent++;
            updater.DeclareVariable(VarNameFoundCount, "INTEGER");
            updater.DeclareVariable(VarNameSql, "VARCHAR2(32000)");
            updater.Indent--;
            updater.BeginScope();
        }