Class DDLStatementNode

All Implemented Interfaces:
Visitable
Direct Known Subclasses:
AlterTableNode, CreateAliasNode, CreateIndexNode, CreateRoleNode, CreateSchemaNode, CreateSequenceNode, CreateTableNode, CreateTriggerNode, CreateViewNode, DropAliasNode, DropIndexNode, DropRoleNode, DropSchemaNode, DropSequenceNode, DropTableNode, DropTriggerNode, DropViewNode, GrantNode, GrantRoleNode, RenameNode, RevokeNode, RevokeRoleNode, SavepointNode

abstract class DDLStatementNode extends StatementNode
A DDLStatementNode represents any type of DDL statement: CREATE TABLE, CREATE INDEX, ALTER TABLE, etc.
  • Field Details

    • UNKNOWN_TYPE

      public static final int UNKNOWN_TYPE
      See Also:
    • ADD_TYPE

      public static final int ADD_TYPE
      See Also:
    • DROP_TYPE

      public static final int DROP_TYPE
      See Also:
    • MODIFY_TYPE

      public static final int MODIFY_TYPE
      See Also:
    • LOCKING_TYPE

      public static final int LOCKING_TYPE
      See Also:
    • UPDATE_STATISTICS

      public static final int UPDATE_STATISTICS
      See Also:
    • DROP_STATISTICS

      public static final int DROP_STATISTICS
      See Also:
    • tableName

      private TableName tableName
    • initOk

      private boolean initOk
    • implicitCreateSchema

      boolean implicitCreateSchema
      sub-classes can set this to be true to allow implicit creation of the main object's schema at execution time.
  • Constructor Details

  • Method Details

    • initAndCheck

      protected void initAndCheck(Object objectName) throws StandardException
      Initialize the object name we will be performing the DDL on and check that we are not in the system schema and that DDL is allowed.
      Throws:
      StandardException
    • isAtomic

      public boolean isAtomic()
      A DDL statement is always atomic
      Overrides:
      isAtomic in class StatementNode
      Returns:
      true
    • getRelativeName

      String getRelativeName()
      Return the name of the table being dropped. This is the unqualified table name.
      Returns:
      the relative name
    • getFullName

      String getFullName()
      Return the full dot expression name of the object being dropped.
      Returns:
      the full name
    • getObjectName

      public final TableName getObjectName()
    • toString

      public String toString()
      Convert this object to a String. See comments in QueryTreeNode.java for how this should be done for tree printing.
      Overrides:
      toString in class StatementNode
      Returns:
      This object as a String
    • activationKind

      int activationKind()
      Specified by:
      activationKind in class StatementNode
    • generate

      final void generate(ActivationClassBuilder acb, MethodBuilder mb) throws StandardException
      Generic generate code for all DDL statements.
      Overrides:
      generate in class QueryTreeNode
      Parameters:
      acb - The ActivationClassBuilder for the class being built
      mb - The execute() method to be built
      Throws:
      StandardException - Thrown on error
    • getSchemaDescriptor

      protected final SchemaDescriptor getSchemaDescriptor() throws StandardException
      Get a schema descriptor for this DDL object. Uses this.objectName. Always returns a schema, we lock in the schema name prior to execution. Checks if current authorizationID is owner of the schema.
      Returns:
      Schema Descriptor
      Throws:
      StandardException - throws on schema name that doesn't exist
    • getSchemaDescriptor

      protected final SchemaDescriptor getSchemaDescriptor(boolean ownerCheck, boolean doSystemSchemaCheck) throws StandardException
      Get a schema descriptor for this DDL object. Uses this.objectName. Always returns a schema, we lock in the schema name prior to execution. The most common call to this method is with 2nd parameter true which says that SchemaDescriptor should not be requested for system schema. The only time this method will get called with 2nd parameter set to false will be when user has requested for inplace compress using SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE Above inplace compress can be invoked on system tables. A call to SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE internally gets translated into ALTER TABLE sql. When ALTER TABLE is executed for SYSCS_INPLACE_COMPRESS_TABLE, we want to allow SchemaDescriptor request for system tables. DERBY-1062
      Parameters:
      ownerCheck - If check for schema owner is needed
      doSystemSchemaCheck - If check for system schema is needed. If set to true, then throw an exception if schema descriptor is requested for a system schema. The only time this param will be set to false is when user is asking for inplace compress of a system table. DERBY-1062
      Returns:
      Schema Descriptor
      Throws:
      StandardException - throws on schema name that doesn't exist
    • getTableDescriptor

      protected final TableDescriptor getTableDescriptor() throws StandardException
      Throws:
      StandardException
    • getTableDescriptor

      protected final TableDescriptor getTableDescriptor(boolean doSystemTableCheck) throws StandardException
      Validate that the table is ok for DDL -- e.g. that it exists, it is not a view. It is ok for it to be a system table. Also check that its schema is ok. Currently, the only time this method is called is when user has asked for inplace compress. eg call SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('SYS','SYSTABLES',1,1,1); Inplace compress is allowed on both system and user tables.
      Returns:
      the validated table descriptor, never null
      Throws:
      StandardException - on error
    • getTableDescriptor

      protected final TableDescriptor getTableDescriptor(UUID tableId) throws StandardException
      Throws:
      StandardException
    • getTableDescriptor

      protected final TableDescriptor getTableDescriptor(TableName tableName) throws StandardException
      Validate that the table is ok for DDL -- e.g. that it exists, it is not a view, and is not a system table, and that its schema is ok.
      Returns:
      the validated table descriptor, never null
      Throws:
      StandardException - on error
    • justGetDescriptor

      private TableDescriptor justGetDescriptor(TableName tableName) throws StandardException
      Just get the table descriptor. Don't worry if it belongs to a view, system table, synonym or a real table. Let the caller decide what to do.
      Parameters:
      tableName -
      Returns:
      TableDescriptor for the give TableName
      Throws:
      StandardException - on error
    • checkTableDescriptor

      private TableDescriptor checkTableDescriptor(TableDescriptor td, boolean doSystemTableCheck) throws StandardException
      Throws:
      StandardException
    • makeFromList

      FromList makeFromList(DataDictionary dd, TableElementList tableElementList, boolean creatingTable) throws StandardException
      Make a from list for binding query fragments in a CREATE/ALTER TABLE statement.
      Parameters:
      dd - Metadata.
      tableElementList - the parenthesized list of columns and constraints in a CREATE/ALTER TABLE statement
      creatingTable - true if this is for CREATE TABLE. false if this is for ALTER TABLE
      Throws:
      StandardException
    • acceptChildren

      void acceptChildren(Visitor v) throws StandardException
      Description copied from class: QueryTreeNode
      Accept a visitor on all child nodes. All sub-classes that add fields that should be visited, should override this method and call accept(v) on all visitable fields, as well as super.acceptChildren(v) to make sure all visitable fields defined by the super-class are accepted too.
      Overrides:
      acceptChildren in class QueryTreeNode
      Parameters:
      v - the visitor
      Throws:
      StandardException - on errors raised by the visitor