Package org.apache.derby.impl.sql.catalog

Source Code of org.apache.derby.impl.sql.catalog.SYSCHECKSRowFactory

/* IBM Confidential
*
* Product ID: 5697-F53
*

* Copyright 2000, 2001WESTHAM

*
* The source code for this program is not published or otherwise divested
* of its trade secrets, irrespective of what has been deposited with the
* U.S. Copyright Office.
*/

package org.apache.derby.impl.sql.catalog;

import org.apache.derby.iapi.types.DataValueDescriptor;

import org.apache.derby.iapi.types.DataValueFactory;

import org.apache.derby.iapi.types.TypeId;
import org.apache.derby.iapi.types.RowLocation;

import org.apache.derby.iapi.types.DataTypeDescriptor;

import org.apache.derby.iapi.sql.dictionary.SystemColumn;
import org.apache.derby.iapi.sql.dictionary.CatalogRowFactory;
import org.apache.derby.iapi.sql.dictionary.ConglomerateDescriptor;
import org.apache.derby.iapi.sql.dictionary.DataDescriptorGenerator;
import org.apache.derby.iapi.sql.dictionary.DataDictionary;
import org.apache.derby.iapi.sql.dictionary.DataDictionaryContext;
import org.apache.derby.iapi.sql.dictionary.SubCheckConstraintDescriptor;
import org.apache.derby.iapi.sql.dictionary.CheckConstraintDescriptor;
import org.apache.derby.iapi.sql.dictionary.TupleDescriptor;
import org.apache.derby.iapi.sql.dictionary.ViewDescriptor;

import org.apache.derby.iapi.sql.execute.ExecutionContext;
import org.apache.derby.iapi.sql.execute.ExecIndexRow;
import org.apache.derby.iapi.sql.execute.ExecRow;
import org.apache.derby.iapi.sql.execute.ExecutionFactory;

import org.apache.derby.iapi.error.StandardException;

import org.apache.derby.iapi.services.sanity.SanityManager;

import org.apache.derby.catalog.ReferencedColumns;
import org.apache.derby.catalog.TypeDescriptor;
import org.apache.derby.iapi.services.uuid.UUIDFactory;
import org.apache.derby.catalog.UUID;

import java.util.Properties;

/**
* Factory for creating a SYSCHECKS row.
*
* @author jerry
*/

public class SYSCHECKSRowFactory extends CatalogRowFactory
{
  private  static final String  TABLENAME_STRING = "SYSCHECKS";

  protected static final int    SYSCHECKS_COLUMN_COUNT = 3;
  protected static final int    SYSCHECKS_CONSTRAINTID = 1;
  protected static final int    SYSCHECKS_CHECKDEFINITION = 2;
  protected static final int    SYSCHECKS_REFERENCEDCOLUMNS = 3;

  // Column widths
  protected static final int    SYSCHECKS_CONSTRAINTID_WIDTH = 36;
  protected static final int    SYSCHECKS_INDEX1_ID = 0;

  // index is unique.
    private  static  final  boolean[]  uniqueness = null;

  private static final int[][] indexColumnPositions =
 
    {SYSCHECKS_CONSTRAINTID}
  };

  private static final String[][] indexColumnNames =
  {
    {"CONSTRAINTID"}
  };

  private  static  final  String[]  uuids =
  {
     "80000056-00d0-fd77-3ed8-000a0a0b1900"  // catalog UUID
    ,"80000059-00d0-fd77-3ed8-000a0a0b1900"  // heap UUID
    ,"80000058-00d0-fd77-3ed8-000a0a0b1900"  // SYSCHECKS_INDEX1 UUID
  };



  /////////////////////////////////////////////////////////////////////////////
  //
  //  CONSTRUCTORS
  //
  /////////////////////////////////////////////////////////////////////////////

    public
  SYSCHECKSRowFactory(UUIDFactory uuidf, ExecutionFactory ef, DataValueFactory dvf,
                                 boolean convertIdToLower)
  {
    super(uuidf,ef,dvf,convertIdToLower);
    initInfo(SYSCHECKS_COLUMN_COUNT, TABLENAME_STRING, indexColumnPositions, indexColumnNames, uniqueness, uuids );
  }

  /////////////////////////////////////////////////////////////////////////////
  //
  //  METHODS
  //
  /////////////////////////////////////////////////////////////////////////////

  /**
   * Make a SYSCHECKS row
   *
   * @param td CheckConstraintDescriptorImpl
   *
   * @return  Row suitable for inserting into SYSCHECKS.
   *
   * @exception   StandardException thrown on failure
   */
  public ExecRow makeRow(TupleDescriptor  td, TupleDescriptor parent)
          throws StandardException
  {
    DataValueDescriptor    col;
    ExecIndexRow      row;
    ReferencedColumns rcd = null;
    String          checkDefinition = null;
    String          constraintID = null;

    if (td != null)
    {
      CheckConstraintDescriptor cd = (CheckConstraintDescriptor)td;
      /*
      ** We only allocate a new UUID if the descriptor doesn't already have one.
      ** For descriptors replicated from a Source system, we already have an UUID.
      */
      constraintID = cd.getUUID().toString();

      checkDefinition = cd.getConstraintText();

      rcd = cd.getReferencedColumnsDescriptor();
    }

    /* Build the row */
    row = getExecutionFactory().getIndexableRow(SYSCHECKS_COLUMN_COUNT);

    /* 1st column is CONSTRAINTID (UUID - char(36)) */
    row.setColumn(SYSCHECKS_CONSTRAINTID, dvf.getCharDataValue(constraintID));

    /* 2nd column is CHECKDEFINITION */
    row.setColumn(SYSCHECKS_CHECKDEFINITION,
        dvf.getLongvarcharDataValue(checkDefinition));

    /* 3rd column is REFERENCEDCOLUMNS
     *  (user type org.apache.derby.catalog.ReferencedColumns)
     */
    row.setColumn(SYSCHECKS_REFERENCEDCOLUMNS,
      dvf.getDataValue(rcd));

    return row;
  }

  /**
   * Builds an empty index row.
   *
   *  @param  indexNumber  Index to build empty row for.
   *  @param  rowLocation  Row location for last column of index row
   *
   * @return corresponding empty index row
   * @exception   StandardException thrown on failure
   */
  public ExecIndexRow  buildEmptyIndexRow( int indexNumber,
                      RowLocation rowLocation)
      throws StandardException
  {
    int  ncols = getIndexColumnCount(indexNumber);
    ExecIndexRow row = getExecutionFactory().getIndexableRow(ncols + 1);

    row.setColumn(ncols + 1, rowLocation);

    switch( indexNumber )
    {
        case SYSCHECKS_INDEX1_ID:
        /* 1st column is CONSTRAINTID (char(36)) */
        row.setColumn(1, getDataValueFactory().getCharDataValue((String) null));
        break;
    // end switch

    return  row;
  }

  ///////////////////////////////////////////////////////////////////////////
  //
  //  ABSTRACT METHODS TO BE IMPLEMENTED BY CHILDREN OF CatalogRowFactory
  //
  ///////////////////////////////////////////////////////////////////////////

  /**
   * Make a ViewDescriptor out of a SYSCHECKS row
   *
   * @param row a SYSCHECKS row
   * @param parentTupleDescriptor  Null for this kind of descriptor.
   * @param dd dataDictionary
   *
   * @exception   StandardException thrown on failure
   */
  public TupleDescriptor buildDescriptor(
    ExecRow          row,
    TupleDescriptor      parentTupleDescriptor,
    DataDictionary       dd )
          throws StandardException
  {
    SubCheckConstraintDescriptor checkDesc = null;

    if (SanityManager.DEBUG)
    {
      SanityManager.ASSERT(
        row.nColumns() == SYSCHECKS_COLUMN_COUNT,
        "Wrong number of columns for a SYSCHECKS row");
    }

    DataValueDescriptor    col;
    DataDescriptorGenerator ddg;
    ReferencedColumns  referencedColumns;
    String        constraintText;
    String        constraintUUIDString;
    UUID        constraintUUID;

    ddg = dd.getDataDescriptorGenerator();

    /* 1st column is CONSTRAINTID (UUID - char(36)) */
    col = row.getColumn(SYSCHECKS_CONSTRAINTID);
    constraintUUIDString = col.getString();
    constraintUUID = getUUIDFactory().recreateUUID(constraintUUIDString);

    /* 2nd column is CHECKDEFINITION */
    col = row.getColumn(SYSCHECKS_CHECKDEFINITION);
    constraintText = col.getString();

    /* 3rd column is REFERENCEDCOLUMNS */
    col = row.getColumn(SYSCHECKS_REFERENCEDCOLUMNS);
    referencedColumns =
      (ReferencedColumns) col.getObject();

    /* now build and return the descriptor */

    checkDesc = new SubCheckConstraintDescriptor(
                    constraintUUID,
                    constraintText,
                    referencedColumns);
    return checkDesc;
  }

  /**
   * Builds a list of columns suitable for creating this Catalog.
   *
   *
   * @return array of SystemColumn suitable for making this catalog.
   */
  public SystemColumn[]  buildColumnList()
  {
    int            index = 0;
    int            columnNumber = 1;
    SystemColumn[]      columnList = new SystemColumn[SYSCHECKS_COLUMN_COUNT];

    // describe columns

    columnList[index++] = new SystemColumnImpl
              convertIdCase( "CONSTRAINTID"),      // name
              SYSCHECKS_CONSTRAINTID,  // column number
              0,          // precision
              0,          // scale
              false,        // nullability
              "CHAR",        // dataType
              true,        // built-in type
              36          // maxLength
                      );
    columnList[index++] =
          new SystemColumnImpl
              convertIdCase( "CHECKDEFINITION"),    // column name
              SYSCHECKS_CHECKDEFINITION,  // column number
              0,          // precision
              0,          // scale
              false,        // nullability
              "LONG VARCHAR",      // dataType
              true,        // built-in type
              TypeId.LONGVARCHAR_MAXWIDTH // maxLength
                     );
    columnList[index++] =
          new SystemColumnImpl
              convertIdCase( "REFERENCEDCOLUMNS"),    // column name
              SYSCHECKS_REFERENCEDCOLUMNS,  // column number
              0,          // precision
              0,          // scale
              false,        // nullability
              "org.apache.derby.catalog.ReferencedColumns"// datatype
              false,        // built-in type
              TypeDescriptor.MAXIMUM_WIDTH_UNKNOWN
                        // maxLength
                     );


    return  columnList;
  }

}
TOP

Related Classes of org.apache.derby.impl.sql.catalog.SYSCHECKSRowFactory

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.