WL#6382: Define and Implement API for Table objects

Affects: Server-8.0   —   Status: Complete

This worklog specifies interfaces of the following object types:
  - Abstract_table
  - Table
  - Column
  - Column_type_element
  - Index
  - Index_column
  - Foreign_key
  - Foreign_key_column

For the framework class definitions see WL#7284.
NF1: No user visible changes.
NOTE: lookup() operations return a valid object pointer if object was
found, or NULL otherwise.

NOTE: handling of attributes of properties and collection types
is described in WL#6380, section "Common API attribute guidelines".

NOTE: Dictionary_object, Entity_object, Weak_object are specified in
WL#7284.

NOTE: Properties is specified in WL#7284.

Abstract_table
==============

The Abstract_table interface is a base interface for Table and View.
This interface contains common operations and properties for views and
tables.

Base interfaces:
  - Dictionary_object
  - Entity_object
  - Weak_object
  
Members:

  * Common attributes:

    - Created time stamp

    - Last-altered time stamp

    - Version

    - Options (properties)

  * References:

    - Weak-reference to the schema containing the table

  * Collections:

    - Ordered collection of table columns (Column)

Table
=====

The Table interface represents one table. To some extent it corresponds to
the TABLE_SHARE instance.

Base interfaces:
  - Abstract_table
  - Dictionary_object
  - Entity_object
  - Weak_object
  
Members:

  * Common attributes:

    - SE id (SE name)

    - Comment

    - Flag specifying if this table is hidden

  * References:

    - Weak-reference to the table collation

    - Weak-reference to the table tablespace

  * SE private attributes:

    - SE private table id

    - SE private data (properties)

  * Partitioning related attributes:

    - Partition type

    - Default partitioning method

    - Partition expression

    - Sub-partition type

    - Sub-partition default partitioning method

    - Sub-partition expression

  * Collections:

    - Unordered collection of table indexes (Index)

    - Unordered collection of table foreign keys (Foreign_key)

    - Unordered  collection of table partitions (Partition)

Column
======

The Column interface represents one column (field) of a table.

Base interfaces:
  - Dictionary_object
  - Entity_object
  - Weak_object

Members:

  * Common attributes:

    - Data type code

    - Flag specifying if the column is nullable or not

    - Flag specifying if the column is zero-filled or not

    - Flag specifying if the column is unsigned or not

    - Flag specifying if the column is auto-incremented or not

    - Char length

    - Numeric precision

    - Numeric scale

    - Datetime precision

    - Default value (binary data)

    - Default option

    - Update option

    - Comment

    - Flag specifying if this column is hidden

    - Options (properties)

  * References:

    - Weak-reference to the column collation

  * SE private attributes:

    - SE private data (properties)

  * Collections:

    - Unordered collection of ENUM-type values (Column_type_element)

    - Unordered collection of SET-type values (Column_type_element)

  * Member of the column collection in Abstract_table:

    - C++ reference to the table containing this column

    - The ordinal position of the column in the table

    - Operation to drop the column

Column_type_element
===================

The Column_type_element interface represents one item from the ENUM / SET
type enumeration.

Base interfaces:
  - Weak_object

Members:

  * Common attributes

    - Item name

    - Item index

  * Member of the collections in Column:

    - C++ reference to the parent column

    - Operation to drop the element

Index
=====

The Index interface represents one index of a table.

Base interfaces:
  - Dictionary_object
  - Entity_object
  - Weak_object

Members:

  * Common attributes

    - Flag specifying if this index is generated

    - Comment

    - Index type

    - Index algorithm

    - Options (properties)

  * References:

    - Weak reference to the tablespace of this index.

  * SE private attributes:

    - SE private data (properties)

    - SE private index id

  * Collections:

    - Ordered collection of index elements (Index_element).

  * Member of the index collection in Table:
    
    - C++ reference to the table containing this index

    - The ordinal position of the index in the table

    - Operation to drop the index from the parent table.

Index_element
=============

A table index constitutes from one or more elements. The Index_element
interface represents one such element.

Base interfaces:
  - Weak_object

Members:

  * Common attributes:

    - Length

    - Sorting order

  * References:

    - C++ reference to the column described by this element

  * Member of the index-element collection in Index:

    - C++ reference to the index containing this element

    - The ordinal position of the element in the index

    - Operation to drop the index element

Foreign_key
===========

The Foreign_key interface represents one foreign-key of a table.

Base interfaces:
  - Dictionary_object
  - Entity_object
  - Weak_object

Members:

  * Common attributes:

    - Match option

    - Update rule

    - Delete rule

    - Schema name of the referenced table

    - Name of the referenced table

  * References:

    - C++ reference to the index corresponding to (built for) this
      foreign-key

  * Collections:

    - Ordered collection of foreign key elements (Foreign_key_element).

  * Member of the foreign-key collection in Table:

    - C++ reference to the table containing this foreign-key

    - Operation to drop the foreign key

Foreign_key_element
===================

A table foreign key constitutes from one or more elements.
The Foreign_key_element interface represents one such element.

Base interfaces:
  - Weak_object

Members:

  * Common attributes:

    - The column name referenced by this element

  * References:

    - C++ reference to the column of this element

  * Member of the foreign-key-element collection in Foreign_key:

    - C++ reference to the foreign key containing this element

    - The ordinal position of the element in the foreign key

    - Operation to drop the foreign key element