Examples of FormatableBitSet


Examples of org.apache.derby.iapi.services.io.FormatableBitSet

    Vector    conglomVector = new Vector();
    relevantCdl = new ConstraintDescriptorList();
    relevantTriggers =  new GenericDescriptorList();

    FormatableBitSet  columnMap = getUpdateReadMap
            (
             baseTable, updateColumnList, conglomVector, relevantCdl,
             relevantTriggers, needsDeferredProcessing, affectedGeneratedColumns );

    markAffectedIndexes( conglomVector );
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

    {
      SanityManager.ASSERT(updateColumnList != null, "updateColumnList is null");
    }

    int    columnCount = baseTable.getMaxColumnID();
    FormatableBitSet  columnMap = new FormatableBitSet(columnCount + 1);

    /*
    ** Add all the changed columns.  We don't strictly
    ** need the before image of the changed column in all cases,
    ** but it makes life much easier since things are set
    ** up around the assumption that we have the before
    ** and after image of the column.
    */
    int[]  changedColumnIds = updateColumnList.sortMe();

    for (int ix = 0; ix < changedColumnIds.length; ix++)
    {
      columnMap.set(changedColumnIds[ix]);
    }

    /*
    ** Get a list of the indexes that need to be
    ** updated.  ColumnMap contains all indexed
    ** columns where 1 or more columns in the index
    ** are going to be modified.
    */
    DMLModStatementNode.getXAffectedIndexes(baseTable, updateColumnList, columnMap, conglomVector );
    /*
    ** Add all columns needed for constraints.  We don't
    ** need to bother with foreign key/primary key constraints
    ** because they are added as a side effect of adding
    ** their indexes above.
    */
    baseTable.getAllRelevantConstraints
      ( StatementType.UPDATE, false, changedColumnIds, needsDeferredProcessing, relevantConstraints );

    int rclSize = relevantConstraints.size();
    for (int index = 0; index < rclSize; index++)
    {
      ConstraintDescriptor cd = relevantConstraints.elementAt(index);
      if (cd.getConstraintType() != DataDictionary.CHECK_CONSTRAINT)
      {
        continue;
      }

      int[] refColumns = ((CheckConstraintDescriptor)cd).getReferencedColumns();
      for (int i = 0; i < refColumns.length; i++)
      {
        columnMap.set(refColumns[i]);
      }
    }

        //
        // Add all columns mentioned by generation clauses which are affected
        // by the columns being updated.
        //
        addGeneratedColumnPrecursors( baseTable, affectedGeneratedColumns, columnMap );
       
    /*
     * If we have any UPDATE triggers, then we will follow the 4 rules
     * mentioned in the comments at the method level.
     */
    baseTable.getAllRelevantTriggers( StatementType.UPDATE, changedColumnIds, relevantTriggers );

    if (relevantTriggers.size() > 0)
    {
      needsDeferredProcessing[0] = true;
     
      boolean needToIncludeAllColumns = false;
      Enumeration descs = relevantTriggers.elements();
      while (descs.hasMoreElements())
      {
        TriggerDescriptor trd = (TriggerDescriptor) descs.nextElement();
       
        //Does this trigger have REFERENCING clause defined on it
        if (!trd.getReferencingNew() && !trd.getReferencingOld())
          continue;
        else
        {
          needToIncludeAllColumns = true;
          break;
        }
      }

      if (needToIncludeAllColumns) {
        for (int i = 1; i <= columnCount; i++)
        {
          columnMap.set(i);
        }
      }
    }


View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

  {
    rs.openCore();
    Vector rowCache = new Vector();
    ExecRow aRow;
    int cacheSize = 0;
    FormatableBitSet toClone = null;

    int maxMemoryPerTable = getLanguageConnectionContext().getOptimizerFactory().getMaxMemoryPerTable();

    aRow = rs.getNextRowCore();
    if (aRow != null)
    {
      toClone = new FormatableBitSet(aRow.nColumns() + 1);
      toClone.set(1);
    }
    while (aRow != null)
    {
      cacheSize += aRow.getColumn(1).getLength();
      if (cacheSize > maxMemoryPerTable ||
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

    else {
      // Figure out how many columns are coming from the heap

      final DataValueDescriptor[] resultRowArray =
        resultRow.getRowArray();
      final FormatableBitSet heapOnly =
        (FormatableBitSet)saved[heapOnlyColRefItem];
      final int heapOnlyLen = heapOnly.getLength();

      // Need a separate DataValueDescriptor array in this case
      rowArray =
         new DataValueDescriptor[heapOnlyLen];
      final int minLen = Math.min(resultRowArray.length, heapOnlyLen);

      // Make a copy of the relevant part of rowArray
      for (int i = 0; i < minLen; ++i) {
        if (resultRowArray[i] != null && heapOnly.isSet(i)) {
          rowArray[i] = resultRowArray[i];
        }
      }
    }
    constructorTime += getElapsedMillis(beginTime);
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

      colPos = (indexCols[i] > 0) ? indexCols[i] : -indexCols[i];
      if (colPos > numCols)
        numCols = colPos;
    }
    sparseRow = new ValueRow(numCols);
    sparseRowMap = new FormatableBitSet(numCols);
    for (int i = 0; i < indexCols.length; i++)
    {
      if (accessedCols.get(i))
      {
        colPos = (indexCols[i] > 0) ? indexCols[i] : -indexCols[i];
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

        // uses sparse rows
        Object[] row = new Object[2];
        row[1] = overflowHandle;

        // we are expanding the record to have 2 fields, the second field is the overflow pointer.
        FormatableBitSet validColumns = new FormatableBitSet(2);
        validColumns.set(1);

        // Use the slot interface as we don't need a lock since
        // the initial insert/update holds the lock on the first
        // portion of the record.
        int slot = getSlotNumber(handle);
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

                    // use a sparse row
                    Object[] newRow =
                        new Object[possibleLastFieldExclusive];

                    FormatableBitSet  newColumnList =
                        new FormatableBitSet(possibleLastFieldExclusive);

                    ByteArrayOutputStream fieldStream = null;

                    for (int i = nextColumn; i < possibleLastFieldExclusive; i++)
                    {
                        if ((validColumns == null) ||
                            (validColumnsSize > i && validColumns.isSet(i)))
                        {
                            newColumnList.set(i);
                            // use the new value
                            newRow[i] = RowUtil.getColumn(row, validColumns, i);

                        }
                        else if (i < endFieldExclusive)
                        {
                            newColumnList.set(i);

                            // use the old value
                            newRow[i] = savedFields[i - nextColumn];
                        }
                    }
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

      for (int i = 0; i < baseColumnMap.length; i++)
        baseColumnMap[i] = i;
    }
    else
    {
      FormatableBitSet allCols;

      if (otherCols == null)
      {
        allCols = accessedCols;
      }
      else
      {
        allCols = new FormatableBitSet(accessedCols);
        allCols.or(otherCols);
      }

      int numCols = allCols.getNumBitsSet();
      baseColumnMap = new int[numCols];

      if (compactRow == null)
      {
        ExecutionFactory ex = lcc.getLanguageConnectionFactory().getExecutionFactory();

        if (isKeyed)
        {
          compactRow = ex.getIndexableRow(numCols);
        }
        else
        {
          compactRow = ex.getValueRow(numCols);
        }
      }

      int position = 0;
      for (int i = allCols.anySetBit();
          i != -1;
          i = allCols.anySetBit(i))
      {
        // Stop looking if there are columns beyond the columns
        // in the candidate row. This can happen due to the
        // otherCols bit map.
        if (i >= numCandidateCols)
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

    }

    droppedColumnPosition = columnDescriptor.getPosition();
    boolean cascade = (behavior == StatementType.DROP_CASCADE);

    FormatableBitSet toDrop = new FormatableBitSet(size + 1);
    toDrop.set(droppedColumnPosition);
    td.setReferencedColumnMap(toDrop);

    dm.invalidateFor(td,
                        (cascade ? DependencyManager.DROP_COLUMN
                                 : DependencyManager.DROP_COLUMN_RESTRICT),
                        lcc);
         
    // If column has a default we drop the default and any dependencies
    if (columnDescriptor.getDefaultInfo() != null)
    {
      dm.clearDependencies(
                lcc, columnDescriptor.getDefaultDescriptor(dd));
    }

    // need to deal with triggers if has referencedColumns
    GenericDescriptorList tdl = dd.getTriggerDescriptors(td);
    Enumeration descs = tdl.elements();
    while (descs.hasMoreElements())
    {
      TriggerDescriptor trd = (TriggerDescriptor) descs.nextElement();
      int[] referencedCols = trd.getReferencedCols();
      if (referencedCols == null)
        continue;
      int refColLen = referencedCols.length, j;
      boolean changed = false;
      for (j = 0; j < refColLen; j++)
      {
        if (referencedCols[j] > droppedColumnPosition)
                {
          changed = true;
                }
        else if (referencedCols[j] == droppedColumnPosition)
        {
          if (cascade)
          {
                        trd.drop(lcc);
            activation.addWarning(
              StandardException.newWarning(
                                SQLState.LANG_TRIGGER_DROPPED,
                                trd.getName(), td.getName()));
          }
          else
          // we'd better give an error if don't drop it,
            // otherwsie there would be unexpected behaviors
            throw StandardException.newException(
                            SQLState.LANG_PROVIDER_HAS_DEPENDENT_OBJECT,
                            dm.getActionString(DependencyManager.DROP_COLUMN),
                            columnInfo[ix].name, "TRIGGER",
                            trd.getName() );
          }
          break;
        }
      }

      // change triggers to refer to columns in new positions
      if (j == refColLen && changed)
      {
        dd.dropTriggerDescriptor(trd, tc);
        for (j = 0; j < refColLen; j++)
        {
          if (referencedCols[j] > droppedColumnPosition)
            referencedCols[j]--;
        }
        dd.addDescriptor(trd, sd,
                 DataDictionary.SYSTRIGGERS_CATALOG_NUM,
                 false, tc);
      }
    }

    ConstraintDescriptorList csdl = dd.getConstraintDescriptors(td);
    int csdl_size = csdl.size();

    // we want to remove referenced primary/unique keys in the second
    // round.  This will ensure that self-referential constraints will
    // work OK.
    int tbr_size = 0;
    ConstraintDescriptor[] toBeRemoved =
            new ConstraintDescriptor[csdl_size];

    // let's go downwards, don't want to get messed up while removing
    for (int i = csdl_size - 1; i >= 0; i--)
    {
      ConstraintDescriptor cd = csdl.elementAt(i);
      int[] referencedColumns = cd.getReferencedColumns();
      int numRefCols = referencedColumns.length, j;
      boolean changed = false;
      for (j = 0; j < numRefCols; j++)
      {
        if (referencedColumns[j] > droppedColumnPosition)
          changed = true;
        if (referencedColumns[j] == droppedColumnPosition)
          break;
      }
      if (j == numRefCols)      // column not referenced
      {
        if ((cd instanceof CheckConstraintDescriptor) && changed)
        {
          dd.dropConstraintDescriptor(cd, tc);
          for (j = 0; j < numRefCols; j++)
          {
            if (referencedColumns[j] > droppedColumnPosition)
              referencedColumns[j]--;
          }
          ((CheckConstraintDescriptor) cd).setReferencedColumnsDescriptor(new ReferencedColumnsDescriptorImpl(referencedColumns));
          dd.addConstraintDescriptor(cd, tc);
        }
        continue;
      }

      if (! cascade)
      {
        // Reject the DROP COLUMN, because there exists a constraint
        // which references this column.
        //
        throw StandardException.newException(
                        SQLState.LANG_PROVIDER_HAS_DEPENDENT_OBJECT,
                        dm.getActionString(DependencyManager.DROP_COLUMN),
                        columnInfo[ix].name, "CONSTRAINT",
                        cd.getConstraintName() );
      }

      if (cd instanceof ReferencedKeyConstraintDescriptor)
      {
        // restrict will raise an error in invalidate if referenced
        toBeRemoved[tbr_size++] = cd;
        continue;
      }

      // drop now in all other cases
      dm.invalidateFor(cd, DependencyManager.DROP_CONSTRAINT,
                  lcc);
            cd.drop(lcc, true);

      activation.addWarning(
                StandardException.newWarning(SQLState.LANG_CONSTRAINT_DROPPED,
        cd.getConstraintName(), td.getName()));
    }

    for (int i = tbr_size - 1; i >= 0; i--)
    {
      ConstraintDescriptor cd = toBeRemoved[i];
      cd.drop(lcc, false);

      activation.addWarning(
                StandardException.newWarning(SQLState.LANG_CONSTRAINT_DROPPED,
                cd.getConstraintName(), td.getName()));

      if (cascade)
      {
        ConstraintDescriptorList fkcdl = dd.getForeignKeys(cd.getUUID());
        for (int j = 0; j < fkcdl.size(); j++)
        {
          ConstraintDescriptor fkcd =
                        (ConstraintDescriptor) fkcdl.elementAt(j);

          dm.invalidateFor(fkcd,
                  DependencyManager.DROP_CONSTRAINT,
                  lcc);

                    fkcd.drop(lcc, true);

          activation.addWarning(
                        StandardException.newWarning(
                            SQLState.LANG_CONSTRAINT_DROPPED,
                fkcd.getConstraintName(),
                            fkcd.getTableDescriptor().getName()));
        }
      }

      dm.invalidateFor(cd, DependencyManager.DROP_CONSTRAINT, lcc);
      dm.clearDependencies(lcc, cd);
    }

        /*
         * The work we've done above, specifically the possible
         * dropping of primary key, foreign key, and unique constraints
         * and their underlying indexes, may have affected the table
         * descriptor. By re-reading the table descriptor here, we
         * ensure that the compressTable code is working with an
         * accurate table descriptor. Without this line, we may get
         * conglomerate-not-found errors and the like due to our
         * stale table descriptor.
         */
    td = dd.getTableDescriptor(tableId);

    compressTable(activation);

    // drop the column from syscolumns
    dd.dropColumnDescriptor(td.getUUID(), columnInfo[ix].name, tc);
    ColumnDescriptor[] cdlArray =
            new ColumnDescriptor[size - columnDescriptor.getPosition()];

    // For each column in this table with a higher column position,
    // drop the entry from SYSCOLUMNS, but hold on to the column
    // descriptor and reset its position to adjust for the dropped
    // column. Then, re-add all those adjusted column descriptors
    // back to SYSCOLUMNS
    //
    for (int i = columnDescriptor.getPosition(), j = 0; i < size; i++, j++)
    {
      ColumnDescriptor cd = (ColumnDescriptor) tab_cdl.elementAt(i);
      dd.dropColumnDescriptor(td.getUUID(), cd.getColumnName(), tc);
      cd.setPosition(i);
      if (cd.isAutoincrement())
      {
        cd.setAutoinc_create_or_modify_Start_Increment(
            ColumnDefinitionNode.CREATE_AUTOINCREMENT);
      }
      cdlArray[j] = cd;
    }
    dd.addDescriptorArray(cdlArray, td,
                DataDictionary.SYSCOLUMNS_CATALOG_NUM, false, tc);

    List deps = dd.getProvidersDescriptorList(td.getObjectID().toString());
    for (Iterator depsIterator = deps.listIterator();
             depsIterator.hasNext();)
    {
      DependencyDescriptor depDesc =
                (DependencyDescriptor) depsIterator.next();

      DependableFinder finder = depDesc.getProviderFinder();
      if (finder instanceof DDColumnDependableFinder)
      {
        DDColumnDependableFinder colFinder =
                    (DDColumnDependableFinder) finder;
        FormatableBitSet oldColumnBitMap =
                    new FormatableBitSet(colFinder.getColumnBitMap());
        FormatableBitSet newColumnBitMap =
                    new FormatableBitSet(oldColumnBitMap);
        newColumnBitMap.clear();
        int bitLen = oldColumnBitMap.getLength();
        for (int i = 0; i < bitLen; i++)
        {
          if (i < droppedColumnPosition && oldColumnBitMap.isSet(i))
            newColumnBitMap.set(i);
          if (i > droppedColumnPosition && oldColumnBitMap.isSet(i))
            newColumnBitMap.set(i - 1);
        }
        if (newColumnBitMap.equals(oldColumnBitMap))
          continue;
        dd.dropStoredDependency(depDesc, tc);
        colFinder.setColumnBitMap(newColumnBitMap.getByteArray());
        dd.addDescriptor(depDesc, null,
                 DataDictionary.SYSDEPENDS_CATALOG_NUM,
                 true, tc);
      }
    }
View Full Code Here

Examples of org.apache.derby.iapi.services.io.FormatableBitSet

      indexConglomerateNumbers = (long[]) compressIndexResult[1];
      compressIRGs = (IndexRowGenerator[]) compressIndexResult[2];
      numIndexes = indexConglomerateNumbers.length;
    }

    indexedCols = new FormatableBitSet(compressTable || truncateTable ? td.getNumberOfColumns() + 1 :
                          td.getNumberOfColumns());
    for (int index = 0; index < numIndexes; index++)
    {
      int[] colIds = compressIRGs[index].getIndexDescriptor().baseColumnPositions();
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. 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.