Package nexj.core.meta.persistence.sql

Examples of nexj.core.meta.persistence.sql.Table


    * Appends SQL to create indexes containing a given column.
    * @param column The column.
    */
   protected void createIndexes(Column column)
   {
      Table table = column.getTable();
     
      for (int i = 0, n = table.getIndexCount(); i < n; ++i)
      {
         Index index = table.getIndex(i);

         if (index.findIndexColumn(column) != null)
         {
            createIndex(index);
         }
View Full Code Here


      {
         Lookup columnMap = (Lookup)tblItr.next();

         try
         {
            Table table = m_schema.getTable((String)tblItr.getKey());

            for (Lookup.Iterator colItr = columnMap.iterator(); colItr.hasNext();)
            {
               String sName = (String)colItr.next();
               ColumnUpgradeInfo info = (ColumnUpgradeInfo)colItr.getValue();
              
               try
               {
                  Column column = table.getColumn(sName);

                  if (!info.isPhantom())
                  {
                     throw new MetadataException("err.meta.upgrade.sql.missingColumnDef",
                        new Object[]{column.getName(), table.getName(), m_final.getDataSource().getName()});
                  }
               }
               catch (UncheckedException e)
               {
                  eh = info.getStep().addException(eh, e);
View Full Code Here

    * Appends an index drop SQL to the SQL appender.
    * @param index The index object.
    */
   protected void dropIndex(Index index)
   {
      Table table = index.getTable();

      if (index.getType() >= Index.BTREE && isIndexable(table))
      {
         StringBuffer buf = new StringBuffer(128);

         if (isConstraint(index))
         {
            buf.append("alter table ");
            buf.append(table.getFullName(getOwner()));
            buf.append(" drop constraint ");
            buf.append(getIndexName(index, true, true));
         }
         else
         {
View Full Code Here

         }
      }

      for (Iterator tableItr = m_schema.getTableIterator(); tableItr.hasNext();)
      {
         Table table = (Table)tableItr.next();

         if (m_final.findTable(table.getName()) == null)
         {
            eh = addException(eh, new MetadataException("err.meta.upgrade.sql.extraTable",
               new Object[]{table.getName(), m_final.getDataSource().getName()}));
         }
      }

      for (Iterator tableItrFinal = m_final.getTableIterator(); tableItrFinal.hasNext();)
      {
         Table tableFinal = (Table)tableItrFinal.next();
         Table table = m_schema.findTable(tableFinal.getName());

         if (table == null)
         {
            eh = addException(eh, new MetadataException("err.meta.upgrade.sql.missingTable",
               new Object[]{tableFinal.getName(), m_final.getDataSource().getName()}));
         }
         else
         {
            if (!tableFinal.getQuotedName().equals(table.getQuotedName()))
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableAliasMismatch",
                  new Object[]{tableFinal.getQuotedName(), table.getQuotedName(),
                     tableFinal.getName(), m_final.getDataSource().getName()}));
            }

            if (!ObjUtil.equal(tableFinal.getOwnerName(), table.getOwnerName()))
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableOwnerMismatch",
                  new Object[]{tableFinal.getOwnerName(), table.getOwnerName(),
                     tableFinal.getName(), m_final.getDataSource().getName()}));
            }

            if (tableFinal.getType() != table.getType())
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableTypeMismatch",
                  new Object[]{tableFinal.getTypeString(), table.getTypeString(), tableFinal.getName(),
                     m_final.getDataSource().getName()}));
            }

            if (table.getType() == Table.QUERY || table.getType() == Table.VIEW)
            {
               // ensure view SQL scripts are identical
               if (!table.getViewScript().equals(tableFinal.getViewScript()))
               {
                  eh = addException(
                     eh,
                     new MetadataException(
                        "err.meta.upgrade.sql.viewTableMismatch",
                        new Object[]{table.getName(), m_final.getDataSource().getName()}));
               }

               if (table.isViewAutoUpdated() != tableFinal.isViewAutoUpdated())
               {
                  eh = addException(
                    eh,
                    new MetadataException(
                       "err.meta.upgrade.sql.viewUpdatedMismatch",
                       new Object[]{table.getName(), m_final.getDataSource().getName()}));
               }
            }

            // validate disabled hints
            for (Iterator/*<String>*/ hintItr = table.getHintIterator(); hintItr.hasNext();)
            {
               Object hint = hintItr.next();

               if (!tableFinal.isHintEnabled(hint.toString()))
               {
                  eh = addException(
                     eh,
                     new MetadataException("err.meta.upgrade.sql.tableHintMismatch",
                     new Object[]{
                        hint, Boolean.FALSE, table.getName(), m_final.getDataSource().getName()}));
               }
            }

            // validate enabled hints
            for (Iterator/*<String>*/ hintItr = tableFinal.getHintIterator(); hintItr.hasNext();)
            {
               Object hint = hintItr.next();

               if (!table.isHintEnabled(hint.toString()))
               {
                  eh = addException(
                     eh,
                     new MetadataException("err.meta.upgrade.sql.tableHintMismatch",
                     new Object[]{
                        hint, Boolean.TRUE, table.getName(), m_final.getDataSource().getName()}));
               }
            }

            if (!ObjUtil.equal(tableFinal.getTablespaceName(), table.getTablespaceName()))
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableTablespaceMismatch",
                  new Object[]{(tableFinal.getTablespaceName() == null) ? "" : tableFinal.getTablespaceName(),
                     (table.getTablespaceName() == null) ? "" : table.getTablespaceName(),
                     tableFinal.getName(), m_final.getDataSource().getName()}));
            }

            if (!ObjUtil.equal(tableFinal.getIndexspaceName(), table.getIndexspaceName()))
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableIndexspaceMismatch",
                  new Object[]{(tableFinal.getIndexspaceName() == null) ? "" : tableFinal.getIndexspaceName(),
                     (table.getIndexspaceName() == null) ? "" : table.getIndexspaceName(),
                     tableFinal.getName(), m_final.getDataSource().getName()}));
            }

            if (!ObjUtil.equal(tableFinal.getLongspaceName(), table.getLongspaceName()))
            {
               eh = addException(eh, new MetadataException("err.meta.upgrade.sql.tableLongspaceMismatch",
                  new Object[]{(tableFinal.getLongspaceName() == null) ? "" : tableFinal.getLongspaceName(),
                     (table.getLongspaceName() == null) ? "" : table.getLongspaceName(),
                     tableFinal.getName(), m_final.getDataSource().getName()}));
            }

            for (int i = 0, n = table.getAspectCount(); i < n; ++i)
            {
               Aspect aspect = m_final.findTable(table.getAspect(i).getName());

               if (aspect != null && !tableFinal.hasAspect(aspect))
               {
                  eh = addException(eh, new MetadataException("err.meta.upgrade.sql.extraTableAspect",
                     new Object[]{aspect.getName(), tableFinal.getName(), m_final.getDataSource().getName()}));
               }
            }

            for (int i = 0, n = tableFinal.getAspectCount(); i < n; ++i)
            {
               Aspect aspect = m_schema.findTable(tableFinal.getAspect(i).getName());

               if (aspect != null && !table.hasAspect(aspect))
               {
                  eh = addException(eh, new MetadataException("err.meta.upgrade.sql.missingTableAspect",
                     new Object[]{aspect.getName(), tableFinal.getName(), m_final.getDataSource().getName()}));
               }
            }

            for (int i = 0, n = table.getColumnCount(); i < n; ++i)
            {
               Column column = table.getColumn(i);

               if (tableFinal.findColumn(column.getName()) == null)
               {
                  eh = addException(eh, new MetadataException("err.meta.upgrade.sql.extraColumn",
                     new Object[]{column.getName(), tableFinal.getName(), m_final.getDataSource().getName()}));
               }
            }

            for (int i = 0, n = tableFinal.getColumnCount(); i < n; ++i)
            {
               Column columnFinal = tableFinal.getColumn(i);
               Column column = table.findColumn(columnFinal.getName());

               if (column == null)
               {
                  eh = addException(eh, new MetadataException("err.meta.upgrade.sql.missingColumn",
                     new Object[]{columnFinal.getName(), tableFinal.getName(), m_final.getDataSource().getName()}));
View Full Code Here

      Collections.sort(tableList, TABLE_COMPARATOR); // sort table array in predictable order

      for (int i = 0, nCount = tableList.size(); i < nCount; ++i)
      {
         Table table = (Table)tableList.get(i);
         Table dropSchemaTable = table.getSchema().findTable(table.getName());

         // remove the table from its declaring schema for dropTable() dependency resolution to work
         // might be null for Main.upgrade tables dropped in some upgrade step
         if (dropSchemaTable != null)
         {
            dropSchemaTable.getSchema().removeTable(dropSchemaTable);
         }

         dropTable(table);
      }
View Full Code Here

      {
         dropObject(objArray[i]);
      }

      Table[] tableArray = getSortedTables(schema);
      Table versionTable = schema.getVersionTable();

      for (int i = 0; i < tableArray.length; ++i)
      {
         if (tableArray[i] != versionTable)
         {
View Full Code Here

    * Appends SQL for altering a table to the SQL appender and upgrades the metadata.
    * @param step The alter table step.
    */
   protected void alterTable(AlterTableStep step)
   {
      Table table = m_state.getSchema().getTable(step.getName());
      Table current = null;
      Index oldPK = getPrimaryKey(table);
      String sNewPK = step.getPrimaryKeyName();
      boolean bCreateIndex = sNewPK != null && (oldPK == null || !oldPK.getName().equals(sNewPK));

      if (bCreateIndex)
      {
         String sName = sNewPK;

         current = table.cloneTemporary();

         // check previous steps if PK was requested, if so then it would not have been created
         for (int i = m_nStep - 2; i >= 0; --i)
         {
            RelationalSchemaUpgradeStep st = m_upgrade.getStep(i);

            if (st instanceof CreateIndexStep)
            {
               if (((CreateIndexStep)st).getOutline().getName().equals(sName))
               {
                  // index was never created, due to an optimization
                  current.removeIndex(current.getIndex(sNewPK));
                  break;
               }
            }
            else if (st instanceof RenameIndexStep)
            {
               if (((RenameIndexStep)st).getNewName().equals(sName))
               {
                  sName = ((RenameIndexStep)st).getOldName();
               }
            }
            else if (!(st instanceof CreateColumnStep) &&
               !(st instanceof AlterColumnStep) &&
               !(st instanceof RenameColumnStep) &&
               !(st instanceof DropColumnStep) &&
               !(st instanceof DropIndexStep))
            {
               break;
            }
         }
      }

      step.apply(m_state);

      if (bCreateIndex)
      {
         Index newPK = getPrimaryKey(table);
         Table intermedary = current.cloneTemporary();

         // change/removal of PK requires drop of PK constraint/index
         if (oldPK != null && oldPK != newPK)
         {
            intermedary.removeIndex(intermedary.getIndex(oldPK.getName()));
         }

         newPK = intermedary.findIndex(newPK.getName()); // find index to be promoted to PK

         // an existing index exists that needs to be promoted to PK according to metadata
         if (newPK != null && newPK.getName().equals(sNewPK)) // PK may differ for e.g. Oracle
         {
            intermedary.removeIndex(newPK);
         }

         dropIndexes(intermedary, current);
         createIndexes(table, intermedary);
      }
View Full Code Here

    * Appends SQL for renaming a table to the SQL appender and upgrades the metadata.
    * @param step The rename table step.
    */
   protected void renameTable(RenameTableStep step)
   {
      Table oldTable = m_state.getSchema().getTable(step.getOldName()).cloneTemporary();

      step.apply(m_state);
      renameTable(step.getTable(), oldTable);
   }
View Full Code Here

      SQLScriptHolder holder = step.getScriptHolder();

      for (int i = 0, nCount = tableList.size(); i < nCount; ++i)
      {
         Table current = (Table)tableList.get(i);
         Table target = schema.getTable(current.getName());

         createColumns(target, current, false); // create nullable columns
         execSQL(holder, current); // execute any defined scripts
         alterColumns(target, current); // set null constraint
         createIndexes(target, current); // create missing indexes
View Full Code Here

      step.apply(m_state);

      for (int i = 0, nCount = tableList.size(); i < nCount; ++i)
      {
         Table current = (Table)tableList.get(i);
         Table target = schema.getTable(current.getName());

         dropIndexes(target, current); // drop extra indexes
         dropColumns(target, current); // drop extra columns
         createIndexes(target, current); // recreate any indexes that had the dropped column
      }
View Full Code Here

TOP

Related Classes of nexj.core.meta.persistence.sql.Table

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.