anchor.diff:      : SCOPE IS tableName | WITH ROWID | (CONSTRAINT ignoredIdentifier_)? referencesClause constraintState*
       ;
   
  +virtualColumnDefinition
  +    : columnName dataType? (GENERATED ALWAYS)? AS LP_ expr RP_ VIRTUAL? inlineConstraint*
  +    ;
  +
   outOfLineConstraint
       : (CONSTRAINT ignoredIdentifier_)?
       (UNIQUE columnNames
  
positive.code: 
  relationalProperty
      : columnDefinition | virtualColumnDefinition | outOfLineConstraint | outOfLineRefConstraint
      ;
  
  tableProperties
      : columnProperties? (AS unionSelect)?
      ;
  
  unionSelect
      : matchNone
      ;
  
  alterTableProperties
      : renameTableSpecification_ | REKEY encryptionSpec
      ;
  
  renameTableSpecification_
      : RENAME TO newTableName
      ;
  
  newTableName
      : IDENTIFIER_
      ;
  
  columnClauses
      : opColumnClause+ | renameColumnSpecification
      ;
  
  opColumnClause
      : addColumnSpecification | modifyColumnSpecification | dropColumnClause
      ;
  
  addColumnSpecification
      : ADD columnOrVirtualDefinitions columnProperties?
      ;
  
  columnOrVirtualDefinitions
      : LP_ columnOrVirtualDefinition (COMMA_ columnOrVirtualDefinition)* RP_ | columnOrVirtualDefinition
      ;
  
  columnOrVirtualDefinition
      : columnDefinition | virtualColumnDefinition
      ;
  
  modifyColumnSpecification
      : MODIFY (LP_? modifyColProperties (COMMA_ modifyColProperties)* RP_? | modifyColSubstitutable)
      ;
  
  modifyColProperties
      : columnName dataType? (DEFAULT expr)? (ENCRYPT encryptionSpec | DECRYPT)? inlineConstraint* 
      ;
  
  modifyColSubstitutable
      : COLUMN columnName NOT? SUBSTITUTABLE AT ALL LEVELS FORCE?
      ;
  
  dropColumnClause
      : SET UNUSED columnOrColumnList cascadeOrInvalidate* | dropColumnSpecification
      ;
  
  dropColumnSpecification
      : DROP columnOrColumnList cascadeOrInvalidate* checkpointNumber?
      ;
  
  columnOrColumnList
      : COLUMN columnName | LP_ columnName (COMMA_ columnName)* RP_
      ;
  
  cascadeOrInvalidate
      : CASCADE CONSTRAINTS | INVALIDATE
      ;
  
  checkpointNumber
      : CHECKPOINT NUMBER_
      ;
  
  renameColumnSpecification
      : RENAME COLUMN columnName TO columnName
      ;
  
  constraintClauses
      : addConstraintSpecification | modifyConstraintClause | renameConstraintClause | dropConstraintClause+
      ;
  
  addConstraintSpecification
      : ADD (outOfLineConstraint+ | outOfLineRefConstraint)
      ;
  
  modifyConstraintClause
      : MODIFY constraintOption constraintState+ CASCADE?
      ;
  
  constraintWithName
      : CONSTRAINT ignoredIdentifier_
      ;
  
  constraintOption
      : constraintWithName | constraintPrimaryOrUnique
      ;
  
  constraintPrimaryOrUnique
      : primaryKey | UNIQUE columnNames
      ;
  
  renameConstraintClause
      : RENAME constraintWithName TO ignoredIdentifier_
      ;
  
  dropConstraintClause
      : DROP
      (
      constraintPrimaryOrUnique CASCADE? ((KEEP | DROP) INDEX)? | (CONSTRAINT ignoredIdentifier_ CASCADE?)
      ) 
      ;
  
  alterExternalTable
      : (addColumnSpecification | modifyColumnSpecification | dropColumnSpecification)+
      ;
  
  columnDefinition
  
negative.code: import Symbol, Keyword, Literals, BaseRule;
  
  createTable
      : CREATE temporaryClause_ TABLE tableName createDefinitionClause_
      ;
  
  createIndex
  