/*
   Copyright (C) 2004-2008 MySQL AB, 2009 Sun Microsystems, Inc.
    All rights reserved. Use is subject to license terms.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
*/

/**
 * @file ndb_constants.h
 *
 * Constants common to NDB API and NDB kernel.
 * Changing the values makes database upgrade impossible.
 *
 * New or removed definitions must be replicated to
 * NdbDictionary.hpp and NdbSqlUtil.hpp.
 *
 * Not for use by application programs.
 * Use the enums provided by NdbDictionary instead.
 */

#ifndef NDB_CONSTANTS_H
#define NDB_CONSTANTS_H

/*
 * Data type constants.
 */

#define NDB_TYPE_UNDEFINED              0

#define NDB_TYPE_TINYINT                1
#define NDB_TYPE_TINYUNSIGNED           2
#define NDB_TYPE_SMALLINT               3
#define NDB_TYPE_SMALLUNSIGNED          4
#define NDB_TYPE_MEDIUMINT              5
#define NDB_TYPE_MEDIUMUNSIGNED         6
#define NDB_TYPE_INT                    7
#define NDB_TYPE_UNSIGNED               8
#define NDB_TYPE_BIGINT                 9
#define NDB_TYPE_BIGUNSIGNED            10
#define NDB_TYPE_FLOAT                  11
#define NDB_TYPE_DOUBLE                 12
#define NDB_TYPE_OLDDECIMAL             13
#define NDB_TYPE_CHAR                   14
#define NDB_TYPE_VARCHAR                15
#define NDB_TYPE_BINARY                 16
#define NDB_TYPE_VARBINARY              17
#define NDB_TYPE_DATETIME               18
#define NDB_TYPE_DATE                   19
#define NDB_TYPE_BLOB                   20
#define NDB_TYPE_TEXT                   21
#define NDB_TYPE_BIT                    22
#define NDB_TYPE_LONGVARCHAR            23
#define NDB_TYPE_LONGVARBINARY          24
#define NDB_TYPE_TIME                   25
#define NDB_TYPE_YEAR                   26
#define NDB_TYPE_TIMESTAMP              27
#define NDB_TYPE_OLDDECIMALUNSIGNED     28
#define NDB_TYPE_DECIMAL                29
#define NDB_TYPE_DECIMALUNSIGNED        30
#define NDB_TYPE_TIME2                  31
#define NDB_TYPE_DATETIME2              32
#define NDB_TYPE_TIMESTAMP2             33

#define NDB_TYPE_MAX                    34


/*
 * Attribute array type.
 */

#define NDB_ARRAYTYPE_FIXED             0 /* 0 length bytes */
#define NDB_ARRAYTYPE_SHORT_VAR         1 /* 1 length bytes */
#define NDB_ARRAYTYPE_MEDIUM_VAR        2 /* 2 length bytes */
#define NDB_ARRAYTYPE_NONE_VAR          3 /* 0 length bytes */

/*
 * Attribute storage type.
 */

#define NDB_STORAGETYPE_MEMORY          0
#define NDB_STORAGETYPE_DISK            1
#define NDB_STORAGETYPE_DEFAULT         2 /* not set */

/*
 * Table temporary status.
 */
#define NDB_TEMP_TAB_PERMANENT          0
#define NDB_TEMP_TAB_TEMPORARY          1
 
/*
 * Table single user mode
 */
#define NDB_SUM_LOCKED       0
#define NDB_SUM_READONLY     1
#define NDB_SUM_READ_WRITE   2

/**
 * *No* nodegroup
 */
#define NDB_NO_NODEGROUP     65536

/*
 * SYSTAB_0 reserved keys
 */
#define NDB_BACKUP_SEQUENCE 0x1F000000

/**
 * Defines for index statistics
 */
#define NDB_INDEX_STAT_DB     "mysql"
#define NDB_INDEX_STAT_SCHEMA "def"

#define NDB_INDEX_STAT_HEAD_TABLE    "ndb_index_stat_head"
#define NDB_INDEX_STAT_SAMPLE_TABLE  "ndb_index_stat_sample"
#define NDB_INDEX_STAT_SAMPLE_INDEX1 "ndb_index_stat_sample_x1"
#define NDB_INDEX_STAT_HEAD_EVENT    "ndb_index_stat_head_event"

#define NDB_INDEX_STAT_PREFIX        "ndb_index_stat"

/**
 * Defines for NDB$INFO.OPERATIONS
 */
#define NDB_INFO_OP_UNKNOWN  0
#define NDB_INFO_OP_READ     1
#define NDB_INFO_OP_READ_SH  2
#define NDB_INFO_OP_READ_EX  3
#define NDB_INFO_OP_INSERT   4
#define NDB_INFO_OP_UPDATE   5
#define NDB_INFO_OP_DELETE   6
#define NDB_INFO_OP_WRITE    7
#define NDB_INFO_OP_UNLOCK   8
#define NDB_INFO_OP_REFRESH  9
#define NDB_INFO_OP_SCAN_UNKNOWN (256 + 0)
#define NDB_INFO_OP_SCAN         (256 + 1)
#define NDB_INFO_OP_SCAN_SH      (256 + 2)
#define NDB_INFO_OP_SCAN_EX      (256 + 3)

/**
 * FK actions
 */
#define NDB_FK_NO_ACTION   0
#define NDB_FK_RESTRICT    1
#define NDB_FK_CASCADE     2
#define NDB_FK_SET_NULL    3
#define NDB_FK_SET_DEFAULT 4

#endif
