Example #1
0
        private void ProcessUniqueIds(IEntity entity)
        {
            ICodeWriterPlSql sql = Model.Lamp.CodeWritersFactory.CreateCodeWriterPlSql();

            foreach (IUniqueId uid in entity.Constraints.UniqueIds)
            {
                sql.ClearAll();
                if (!useUniqueIndexes)
                {
                    sql.WriteCreateUniqueConstraint(uid, environment);
                    creator.WriteFrom(sql);
                    creator.WriteSeparator();
                    WriteExecImmediatWhenNotExists(
                        "ALL_CONSTRAINTS",
                        String.Format("OWNER='{0}' AND TABLE_NAME='{1}' AND CONSTRAINT_TYPE='U' AND CONSTRAINT_NAME='{2}'",
                                      entity.Persistence.Schema,
                                      entity.Persistence.Name,
                                      uid.Persistence.Name),
                        sql);
                    uid.Index.Processed = true;
                    genie.Config.NotifyAssistants("Create", uid, sql.ToString(true));
                    updater.WriteLine();
                }
            }
        }
Example #2
0
        private void ProcessSequences()
        {
            ICodeWriterPlSql sql = Model.Lamp.CodeWritersFactory.CreateCodeWriterPlSql();

            foreach (IGenerator gen in Model.Generators)
            {
                if (gen.Owner is IEntity && !(gen.Owner as IEntity).Persistence.Persisted)
                {
                    continue;
                }
                if (gen.Type == GeneratorType.Sequence)
                {
                    sql.ClearAll();
                    sql.WriteCreateSequence(gen, environment);
                    ISpellHint hint = genie.FindHint(gen);
                    if (hint != null)
                    {
                        sql.WriteText(hint.GetText(gen));
                    }
                    creator.WriteFrom(sql);
                    creator.WriteSeparator();

                    genie.Config.NotifyAssistants("Create", gen, sql.ToString(true));

                    WriteExecImmediatWhenNotExists(
                        "ALL_SEQUENCES",
                        String.Format("SEQUENCE_OWNER='{0}' AND SEQUENCE_NAME='{1}'", gen.Persistence.Schema, gen.Persistence.Name),
                        sql);
                    updater.WriteLine();
                }
            }
        }
Example #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();
        }
Example #4
0
        private void ProcessIndexes()
        {
            ICodeWriterPlSql sql = Model.Lamp.CodeWritersFactory.CreateCodeWriterPlSql();

            foreach (IIndex index in Model.PhysicalModel.Indexes)
            {
                if (!index.Processed && index.Generate)
                {
                    sql.ClearAll();
                    sql.WriteCreateIndex(index, environment);
                    ISpellHint hint = genie.FindHint(index);
                    if (hint != null)
                    {
                        sql.WriteText(hint.GetText(index));
                    }
                    creator.WriteFrom(sql);
                    creator.WriteSeparator();
                    StringBuilder sqlFrom = new StringBuilder();
                    sqlFrom.Append("SELECT I.OWNER, I.INDEX_NAME, COUNT(*) ");
                    sqlFrom.Append("FROM ALL_INDEXES I ");
                    sqlFrom.Append(" INNER JOIN ALL_IND_COLUMNS IC ON I.OWNER = IC.INDEX_OWNER AND I.INDEX_NAME = IC.INDEX_NAME");
                    sqlFrom.Append(" LEFT OUTER JOIN ALL_CONSTRAINTS AC ON I.INDEX_NAME = AC.CONSTRAINT_NAME AND I.TABLE_OWNER = AC.OWNER AND I.TABLE_NAME = AC.TABLE_NAME AND AC.CONSTRAINT_TYPE = 'P'");
                    sqlFrom.Append(" LEFT OUTER JOIN(");
                    for (int i = 0; i < index.Columns.Count; i++)
                    {
                        sqlFrom.AppendFormat("{0}SELECT '{1}' AS COLUMN_NAME FROM DUAL",
                                             i == 0 ? "" : " UNION ",
                                             index.Columns[i].Attribute.Persistence.Name);
                    }
                    sqlFrom.Append(") IC2 ON IC.COLUMN_NAME = IC2.COLUMN_NAME");
                    sqlFrom.AppendFormat(" WHERE I.OWNER='{0}' AND I.TABLE_OWNER = '{1}' AND I.TABLE_NAME='{2}' AND AC.CONSTRAINT_NAME IS NULL",
                                         index.Schema,
                                         index.Entity.Persistence.Schema,
                                         index.Entity.Persistence.Name);
                    sqlFrom.Append(" GROUP BY I.OWNER, I.INDEX_NAME");
                    sqlFrom.AppendFormat(" HAVING COUNT(*) = {0}", index.Columns.Count);
                    sqlFrom.Append(" UNION ALL ");
                    sqlFrom.AppendFormat("SELECT I.OWNER, I.INDEX_NAME, 1 FROM ALL_INDEXES I WHERE I.OWNER='{0}' AND I.INDEX_NAME='{1}'",
                                         index.Schema, index.Name);

                    WriteExecImmediatWhenNotExists(
                        String.Format("({0}) T1", sqlFrom.ToString()),
                        "1=1",
                        sql);
                    genie.Config.NotifyAssistants("Create", index, sql.ToString(true));
                    updater.WriteLine();
                }
            }
        }