Examples of CatalogRowFactory


Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

                   TransactionController tc)
    throws StandardException
  {
    TabInfoImpl ti =  (catalogNumber < NUM_CORE) ? coreInfo[catalogNumber] :
      getNonCoreTI(catalogNumber);
    CatalogRowFactory crf = ti.getCatalogRowFactory();

    ExecRow[] rl = new ExecRow[td.length];

    for (int index = 0; index < td.length; index++)
    {
      ExecRow row = crf.makeRow(td[index], parent);
      rl[index] = row;
    }

    int insertRetCode = ti.insertRowList( rl, tc );
    if (!allowDuplicates && insertRetCode != TabInfoImpl.ROWNOTDUPLICATE)
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

    ExecIndexRow      indexTemplateRow;
    ExecRow         outRow;
    ScanController      scanController = null;
    boolean          foundRow;
    FormatableBitSet          colToCheck = new FormatableBitSet(indexCol);
    CatalogRowFactory    rf = ti.getCatalogRowFactory()

    if (SanityManager.DEBUG)
    {
      SanityManager.ASSERT(indexId >= 0, "code needs to be enhanced"+
        " to support a table scan to find the index id");
    }

    colToCheck.set(indexCol - 1);

    ScanQualifier[][] qualifier = exFactory.getScanQualifier(1);
    qualifier[0][0].setQualifier
        (indexCol - 1,
         schemaIdOrderable,
         Orderable.ORDER_OP_EQUALS,
         false,
         false,
         false);

    outRow = rf.makeEmptyRow();

    try
    {
      heapCC =
              tc.openConglomerate(
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

    ExecRow            baseRow;
    ExecIndexRow        indexableRow;
    int              numColumns;
    long            conglomId;
    RowLocation          rl;
    CatalogRowFactory      rf = ti.getCatalogRowFactory();
    IndexRowGenerator      irg;
    ConglomerateDescriptor  conglomerateDescriptor;

    initSystemIndexVariables(ddg, ti, indexNumber);

    irg = ti.getIndexRowGenerator(indexNumber);

    numColumns = ti.getIndexColumnCount(indexNumber);

    /* Is the index unique */
    isUnique = ti.isIndexUnique(indexNumber);

    // create an index row template
    indexableRow = irg.getIndexRowTemplate();

    baseRow = rf.makeEmptyRow();

    // Get a RowLocation template
    cc = tc.openConglomerate(
      heapConglomerateNumber, false, 0,
            TransactionController.MODE_RECORD,
      TransactionController.ISOLATION_REPEATABLE_READ);

    rl = cc.newRowLocationTemplate();
    cc.close();

    // Get an index row based on the base row
    irg.getIndexRow(baseRow, rl, indexableRow, (FormatableBitSet) null);

    // Describe the properties of the index to the store using Properties
    // RESOLVE: The following properties assume a BTREE index.
    Properties  indexProperties = ti.getCreateIndexProperties(indexNumber);

    // Tell it the conglomerate id of the base table
    indexProperties.put(
      "baseConglomerateId",
      Long.toString( heapConglomerateNumber ) );

    // All indexes are unique because they contain the RowLocation.
    // The number of uniqueness columns must include the RowLocation
    // if the user did not specify a unique index.
    indexProperties.put("nUniqueColumns",
              Integer.toString(
                isUnique ? numColumns : numColumns + 1));

    // By convention, the row location column is the last column
    indexProperties.put("rowLocationColumn",
              Integer.toString(numColumns));

    // For now, all columns are key fields, including the RowLocation
    indexProperties.put("nKeyFields",
              Integer.toString(numColumns + 1));

    /* Create and add the conglomerate (index) */
    conglomId = tc.createConglomerate(
      "BTREE", // we're requesting an index conglomerate
      indexableRow.getRowArray(),
      null, //default sort order
            null, //default collation id's for collumns in all system congloms
      indexProperties, // default properties
      TransactionController.IS_DEFAULT); // not temporary

    conglomerateDescriptor =
      ddg.newConglomerateDescriptor(conglomId,
                      rf.getIndexName(indexNumber),
                      true,
                      irg,
                      false,
                      rf.getCanonicalIndexUUID(indexNumber),
                      rf.getCanonicalTableUUID(),
                      sd.getUUID());
    ti.setIndexConglomerate( conglomerateDescriptor );

    return conglomerateDescriptor;
  }
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

                       int indexNumber)
    throws StandardException
  {
    int          numCols = ti.getIndexColumnCount(indexNumber);
    int[]        baseColumnPositions = new int[numCols];
    CatalogRowFactory  rf = ti.getCatalogRowFactory();

    for (int colCtr = 0; colCtr < numCols; colCtr++)
    {
      baseColumnPositions[colCtr] =
        ti.getBaseColumnPosition(indexNumber, colCtr);
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

                              SchemaDescriptor sd,
                  TransactionController tc,
                  DataDescriptorGenerator ddg)
            throws StandardException
  {
    CatalogRowFactory  crf = ti.getCatalogRowFactory();

    String        name = ti.getTableName();
    long        conglomId = ti.getHeapConglomerate();
    SystemColumn[]    columnList = crf.buildColumnList();
    UUID        heapUUID = crf.getCanonicalHeapUUID();
    String        heapName = crf.getCanonicalHeapName();
    TableDescriptor    td;
    UUID        toid;
    ColumnDescriptor  cd;
    int          columnCount;
    SystemColumn    column;

    // add table to the data dictionary

    columnCount = columnList.length;
    td = ddg.newTableDescriptor(name, sd, TableDescriptor.SYSTEM_TABLE_TYPE,
                    TableDescriptor.ROW_LOCK_GRANULARITY);
    td.setUUID(crf.getCanonicalTableUUID());
    addDescriptor(td, sd, SYSTABLES_CATALOG_NUM,
            false, tc);
    toid = td.getUUID();
 
    /* Add the conglomerate for the heap */
 
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

            boolean forUpdate,
            int isolationLevel,
            TransactionController tc)
      throws StandardException
  {
    CatalogRowFactory    rf = ti.getCatalogRowFactory();
    ConglomerateController  heapCC;
    ExecIndexRow        indexRow1;
    ExecRow         outRow;
    RowLocation        baseRowLocation;
    ScanController      scanController;
    TupleDescriptor      td = null;

    if (SanityManager.DEBUG) {
      SanityManager.ASSERT
        (isolationLevel ==
         TransactionController.ISOLATION_REPEATABLE_READ ||
         isolationLevel ==
         TransactionController.ISOLATION_READ_UNCOMMITTED);
    }

    outRow = rf.makeEmptyRow();

    heapCC = tc.openConglomerate(
                ti.getHeapConglomerate(), false, 0,
                TransactionController.MODE_RECORD,
                isolationLevel);

    /* Scan the index and go to the data pages for qualifying rows to
     * build the column descriptor.
     */
    scanController = tc.openScan(
        ti.getIndexConglomerate(indexId)// conglomerate to open
        false, // don't hold open across commit
        (forUpdate) ? TransactionController.OPENMODE_FORUPDATE : 0,
                TransactionController.MODE_RECORD,
                isolationLevel,
        (FormatableBitSet) null,         // all fields as objects
        keyRow.getRowArray(),   // start position - first row
        ScanController.GE,      // startSearchOperation
        scanQualifiers,         //scanQualifier,
        keyRow.getRowArray(),   // stop position - through last row
        ScanController.GT);     // stopSearchOperation

    while (true)
    {
       // create an index row template
      indexRow1 = getIndexRowFromHeapRow(
                  ti.getIndexRowGenerator(indexId),
                  heapCC.newRowLocationTemplate(),
                  outRow);

      // It is important for read uncommitted scans to use fetchNext()
      // rather than fetch, so that the fetch happens while latch is
      // held, otherwise the next() might position the scan on a row,
      // but the subsequent fetch() may find the row deleted or purged
      // from the table.
      if (!scanController.fetchNext(indexRow1.getRowArray())) {
        break;
      }

      baseRowLocation = (RowLocationindexRow1.getColumn(
                        indexRow1.nColumns());

            // RESOLVE paulat - remove the try catch block when track 3677 is fixed
            // just leave the contents of the try block
            // adding to get more info on track 3677

            boolean base_row_exists = false;
            try
            {
          base_row_exists =
                    heapCC.fetch(
                        baseRowLocation, outRow.getRowArray(), (FormatableBitSet) null);
            }
            catch (RuntimeException re)
            {
                if (SanityManager.DEBUG)
                {
                    if (re instanceof AssertFailure)
                    {
              StringBuffer strbuf = new StringBuffer("Error retrieving base row in table "+ti.getTableName());
              strbuf.append(": An ASSERT was thrown when trying to locate a row matching index row "+indexRow1+" from index "+ti.getIndexName(indexId)+", conglom number "+ti.getIndexConglomerate(indexId));
                        debugGenerateInfo(strbuf,tc,heapCC,ti,indexId);
                    }
                }
                throw re;
            }
            catch (StandardException se)
            {
                if (SanityManager.DEBUG)
                {
                    // only look for a specific error i.e. that of record on page
                    // no longer exists
                    // do not want to catch lock timeout errors here
                    if (se.getSQLState().equals("XSRS9"))
                    {
              StringBuffer strbuf = new StringBuffer("Error retrieving base row in table "+ti.getTableName());
              strbuf.append(": A StandardException was thrown when trying to locate a row matching index row "+indexRow1+" from index "+ti.getIndexName(indexId)+", conglom number "+ti.getIndexConglomerate(indexId));
                        debugGenerateInfo(strbuf,tc,heapCC,ti,indexId);
                    }
                }
                throw se;
            }

            if (SanityManager.DEBUG)
            {
                // it can not be possible for heap row to disappear while
                // holding scan cursor on index at ISOLATION_REPEATABLE_READ.
        if (! base_row_exists &&
            (isolationLevel ==
               TransactionController.ISOLATION_REPEATABLE_READ)) {
          StringBuffer strbuf = new StringBuffer("Error retrieving base row in table "+ti.getTableName());
          strbuf.append(": could not locate a row matching index row "+indexRow1+" from index "+ti.getIndexName(indexId)+", conglom number "+ti.getIndexConglomerate(indexId));
                    debugGenerateInfo(strbuf,tc,heapCC,ti,indexId);
                    // RESOLVE: for now, we are going to kill the VM
                    // to help debug this problem.
                    System.exit(1);

                    // RESOLVE: not currently reached
                    //SanityManager.THROWASSERT(strbuf.toString());
        }
            }

      if (!base_row_exists &&
          (isolationLevel ==
             TransactionController.ISOLATION_READ_UNCOMMITTED)) {
        // If isolationLevel == ISOLATION_READ_UNCOMMITTED we may
        // possibly see that the base row does not exist even if the
        // index row did.  This mode is currently only used by
        // TableNameInfo's call to hashAllTableDescriptorsByTableId,
        // cf. DERBY-3678, and by getStatisticsDescriptors,
                // cf. DERBY-4881.
                //
                // For the former call, a table's schema descriptor is attempted
        // read, and if the base row for the schema has gone between
        // reading the index and the base table, the table that needs
        // this information has gone, too.  So, the table should not
        // be needed for printing lock timeout or deadlock
        // information, so we can safely just return an empty (schema)
        // descriptor. Furthermore, neither Timeout or DeadLock
        // diagnostics access the schema of a table descriptor, so it
        // seems safe to just return an empty schema descriptor for
        // the table.
        //
        // There is a theoretical chance another row may have taken
        // the first one's place, but only if a compress of the base
        // table managed to run between the time we read the index and
        // the base row, which seems unlikely so we ignore that.
        //
        // Even the index row may be gone in the above use case, of
        // course, and that case also returns an empty descriptor
        // since no match is found.

        td = null;

      } else {
        // normal case
        td = rf.buildDescriptor(outRow, parentTupleDescriptor, this);
      }



      /* If list is null, then caller only wants a single descriptor - we're done
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

            TabInfoImpl ti,
            TupleDescriptor parentTupleDescriptor,
            List list)
      throws StandardException
  {
    CatalogRowFactory    rf = ti.getCatalogRowFactory();
    ConglomerateController  heapCC;
    ExecRow         outRow;
    ScanController      scanController;
    TransactionController  tc;
    TupleDescriptor      td = null;

    // Get the current transaction controller
    tc = getTransactionCompile();

    outRow = rf.makeEmptyRow();

    /*
    ** Table scan
    */
    scanController = tc.openScan(
        ti.getHeapConglomerate()// conglomerate to open
        false,             // don't hold open across commit
        0,               // for read
        TransactionController.MODE_TABLE,
                TransactionController.ISOLATION_REPEATABLE_READ,
        (FormatableBitSet) null,         // all fields as objects
        (DataValueDescriptor[]) null,    // start position - first row
        0,              // startSearchOperation - none
        scanQualifiers,     // scanQualifier,
        (DataValueDescriptor[]) null,    // stop position - through last row
        0);             // stopSearchOperation - none

    while (scanController.fetchNext(outRow.getRowArray()))
    {
      td = rf.buildDescriptor(outRow, parentTupleDescriptor, this);

      /* If dList is null, then caller only wants a single descriptor - we're done
       * else just add the current descriptor to the list.
       */
      if (list == null)
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

    )
    throws StandardException
  {
    long            indexConglomerateNumber = tabInfo.getIndexConglomerate( indexNumber );
    IndexRowGenerator      indexRowGenerator = tabInfo.getIndexRowGenerator( indexNumber );
    CatalogRowFactory      rowFactory = tabInfo.getCatalogRowFactory();
    ExecRow            heapRow = rowFactory.makeEmptyRow();
    ExecIndexRow        indexableRow = indexRowGenerator.getIndexRowTemplate();

    ScanController        heapScan =
      tc.openScan(
        heapConglomerateNumber,       // conglomerate to open
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

   */
  private void modifySysTableNullability(TransactionController tc, int catalogNum)
    throws StandardException
  {   
    TabInfoImpl ti = bootingDictionary.getNonCoreTIByNumber(catalogNum);
    CatalogRowFactory rowFactory = ti.getCatalogRowFactory();
   
    if (catalogNum == DataDictionaryImpl.SYSSTATEMENTS_CATALOG_NUM)
    {
      // SYSSTATEMENTS table ==> SYSSTATEMENTS_COMPILATION_SCHEMAID needs
      // to be modified.
View Full Code Here

Examples of org.apache.derby.iapi.sql.dictionary.CatalogRowFactory

            TabInfoImpl ti,
            TupleDescriptor parentTupleDescriptor,
            List list)
      throws StandardException
  {
    CatalogRowFactory    rf = ti.getCatalogRowFactory();
    ConglomerateController  heapCC;
    ExecRow         outRow;
    ScanController      scanController;
    TransactionController  tc;
    TupleDescriptor      td = null;

    // Get the current transaction controller
    tc = getTransactionCompile();

    outRow = rf.makeEmptyRow();

    /*
    ** Table scan
    */
    scanController = tc.openScan(
        ti.getHeapConglomerate()// conglomerate to open
        false,             // don't hold open across commit
        0,               // for read
        TransactionController.MODE_TABLE,
                TransactionController.ISOLATION_REPEATABLE_READ,
        (FormatableBitSet) null,         // all fields as objects
        (DataValueDescriptor[]) null,    // start position - first row
        0,              // startSearchOperation - none
        scanQualifiers,     // scanQualifier,
        (DataValueDescriptor[]) null,    // stop position - through last row
        0);             // stopSearchOperation - none

    while (scanController.fetchNext(outRow.getRowArray()))
    {
      td = rf.buildDescriptor(outRow, parentTupleDescriptor, this);

      /* If dList is null, then caller only wants a single descriptor - we're done
       * else just add the current descriptor to the list.
       */
      if (list == null)
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.