summaryrefslogtreecommitdiff
path: root/storage/ndb/src/ndbapi/NdbDictionary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/ndbapi/NdbDictionary.cpp')
-rw-r--r--storage/ndb/src/ndbapi/NdbDictionary.cpp1050
1 files changed, 1050 insertions, 0 deletions
diff --git a/storage/ndb/src/ndbapi/NdbDictionary.cpp b/storage/ndb/src/ndbapi/NdbDictionary.cpp
new file mode 100644
index 00000000000..4cc47543cec
--- /dev/null
+++ b/storage/ndb/src/ndbapi/NdbDictionary.cpp
@@ -0,0 +1,1050 @@
+/* Copyright (C) 2003 MySQL AB
+
+ 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; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <NdbDictionary.hpp>
+#include "NdbDictionaryImpl.hpp"
+#include <NdbOut.hpp>
+
+/*****************************************************************
+ * Column facade
+ */
+NdbDictionary::Column::Column(const char * name)
+ : m_impl(* new NdbColumnImpl(* this))
+{
+ setName(name);
+}
+
+NdbDictionary::Column::Column(const NdbDictionary::Column & org)
+ : m_impl(* new NdbColumnImpl(* this))
+{
+ m_impl = org.m_impl;
+}
+
+NdbDictionary::Column::Column(NdbColumnImpl& impl)
+ : m_impl(impl)
+{
+}
+
+NdbDictionary::Column::~Column(){
+ NdbColumnImpl * tmp = &m_impl;
+ if(this != tmp){
+ delete tmp;
+ }
+}
+
+NdbDictionary::Column&
+NdbDictionary::Column::operator=(const NdbDictionary::Column& column)
+{
+ m_impl = column.m_impl;
+
+ return *this;
+}
+
+void
+NdbDictionary::Column::setName(const char * name){
+ m_impl.m_name.assign(name);
+}
+
+const char*
+NdbDictionary::Column::getName() const {
+ return m_impl.m_name.c_str();
+}
+
+void
+NdbDictionary::Column::setType(Type t){
+ m_impl.init(t);
+}
+
+NdbDictionary::Column::Type
+NdbDictionary::Column::getType() const {
+ return m_impl.m_type;
+}
+
+void
+NdbDictionary::Column::setPrecision(int val){
+ m_impl.m_precision = val;
+}
+
+int
+NdbDictionary::Column::getPrecision() const {
+ return m_impl.m_precision;
+}
+
+void
+NdbDictionary::Column::setScale(int val){
+ m_impl.m_scale = val;
+}
+
+int
+NdbDictionary::Column::getScale() const{
+ return m_impl.m_scale;
+}
+
+void
+NdbDictionary::Column::setLength(int length){
+ m_impl.m_length = length;
+}
+
+int
+NdbDictionary::Column::getLength() const{
+ return m_impl.m_length;
+}
+
+void
+NdbDictionary::Column::setInlineSize(int size)
+{
+ m_impl.m_precision = size;
+}
+
+void
+NdbDictionary::Column::setCharset(CHARSET_INFO* cs)
+{
+ m_impl.m_cs = cs;
+}
+
+CHARSET_INFO*
+NdbDictionary::Column::getCharset() const
+{
+ return m_impl.m_cs;
+}
+
+int
+NdbDictionary::Column::getInlineSize() const
+{
+ return m_impl.m_precision;
+}
+
+void
+NdbDictionary::Column::setPartSize(int size)
+{
+ m_impl.m_scale = size;
+}
+
+int
+NdbDictionary::Column::getPartSize() const
+{
+ return m_impl.m_scale;
+}
+
+void
+NdbDictionary::Column::setStripeSize(int size)
+{
+ m_impl.m_length = size;
+}
+
+int
+NdbDictionary::Column::getStripeSize() const
+{
+ return m_impl.m_length;
+}
+
+int
+NdbDictionary::Column::getSize() const{
+ return m_impl.m_attrSize;
+}
+
+void
+NdbDictionary::Column::setNullable(bool val){
+ m_impl.m_nullable = val;
+}
+
+bool
+NdbDictionary::Column::getNullable() const {
+ return m_impl.m_nullable;
+}
+
+void
+NdbDictionary::Column::setPrimaryKey(bool val){
+ m_impl.m_pk = val;
+}
+
+bool
+NdbDictionary::Column::getPrimaryKey() const {
+ return m_impl.m_pk;
+}
+
+void
+NdbDictionary::Column::setPartitionKey(bool val){
+ m_impl.m_distributionKey = val;
+}
+
+bool
+NdbDictionary::Column::getPartitionKey() const{
+ return m_impl.m_distributionKey;
+}
+
+const NdbDictionary::Table *
+NdbDictionary::Column::getBlobTable() const {
+ NdbTableImpl * t = m_impl.m_blobTable;
+ if (t)
+ return t->m_facade;
+ return 0;
+}
+
+void
+NdbDictionary::Column::setAutoIncrement(bool val){
+ m_impl.m_autoIncrement = val;
+}
+
+bool
+NdbDictionary::Column::getAutoIncrement() const {
+ return m_impl.m_autoIncrement;
+}
+
+void
+NdbDictionary::Column::setAutoIncrementInitialValue(Uint64 val){
+ m_impl.m_autoIncrementInitialValue = val;
+}
+
+void
+NdbDictionary::Column::setDefaultValue(const char* defaultValue)
+{
+ m_impl.m_defaultValue.assign(defaultValue);
+}
+
+const char*
+NdbDictionary::Column::getDefaultValue() const
+{
+ return m_impl.m_defaultValue.c_str();
+}
+
+int
+NdbDictionary::Column::getColumnNo() const {
+ return m_impl.m_attrId;
+}
+
+bool
+NdbDictionary::Column::equal(const NdbDictionary::Column & col) const {
+ return m_impl.equal(col.m_impl);
+}
+
+int
+NdbDictionary::Column::getSizeInBytes() const
+{
+ return m_impl.m_attrSize * m_impl.m_arraySize;
+}
+
+/*****************************************************************
+ * Table facade
+ */
+NdbDictionary::Table::Table(const char * name)
+ : m_impl(* new NdbTableImpl(* this))
+{
+ setName(name);
+}
+
+NdbDictionary::Table::Table(const NdbDictionary::Table & org)
+ : NdbDictionary::Object(),
+ m_impl(* new NdbTableImpl(* this))
+{
+ m_impl.assign(org.m_impl);
+}
+
+NdbDictionary::Table::Table(NdbTableImpl & impl)
+ : m_impl(impl)
+{
+}
+
+NdbDictionary::Table::~Table(){
+ NdbTableImpl * tmp = &m_impl;
+ if(this != tmp){
+ delete tmp;
+ }
+}
+
+NdbDictionary::Table&
+NdbDictionary::Table::operator=(const NdbDictionary::Table& table)
+{
+ m_impl.assign(table.m_impl);
+
+ m_impl.m_facade = this;
+ return *this;
+}
+
+void
+NdbDictionary::Table::setName(const char * name){
+ m_impl.setName(name);
+}
+
+const char *
+NdbDictionary::Table::getName() const {
+ return m_impl.getName();
+}
+
+int
+NdbDictionary::Table::getTableId() const {
+ return m_impl.m_tableId;
+}
+
+void
+NdbDictionary::Table::addColumn(const Column & c){
+ NdbColumnImpl* col = new NdbColumnImpl;
+ (* col) = NdbColumnImpl::getImpl(c);
+ m_impl.m_columns.push_back(col);
+ if(c.getPrimaryKey()){
+ m_impl.m_noOfKeys++;
+ }
+ if (col->getBlobType()) {
+ m_impl.m_noOfBlobs++;
+ }
+ m_impl.buildColumnHash();
+}
+
+const NdbDictionary::Column*
+NdbDictionary::Table::getColumn(const char * name) const {
+ return m_impl.getColumn(name);
+}
+
+const NdbDictionary::Column*
+NdbDictionary::Table::getColumn(const int attrId) const {
+ return m_impl.getColumn(attrId);
+}
+
+NdbDictionary::Column*
+NdbDictionary::Table::getColumn(const char * name)
+{
+ return m_impl.getColumn(name);
+}
+
+NdbDictionary::Column*
+NdbDictionary::Table::getColumn(const int attrId)
+{
+ return m_impl.getColumn(attrId);
+}
+
+void
+NdbDictionary::Table::setLogging(bool val){
+ m_impl.m_logging = val;
+}
+
+bool
+NdbDictionary::Table::getLogging() const {
+ return m_impl.m_logging;
+}
+
+void
+NdbDictionary::Table::setFragmentType(FragmentType ft){
+ m_impl.m_fragmentType = ft;
+}
+
+NdbDictionary::Object::FragmentType
+NdbDictionary::Table::getFragmentType() const {
+ return m_impl.m_fragmentType;
+}
+
+void
+NdbDictionary::Table::setKValue(int kValue){
+ m_impl.m_kvalue = kValue;
+}
+
+int
+NdbDictionary::Table::getKValue() const {
+ return m_impl.m_kvalue;
+}
+
+void
+NdbDictionary::Table::setMinLoadFactor(int lf){
+ m_impl.m_minLoadFactor = lf;
+}
+
+int
+NdbDictionary::Table::getMinLoadFactor() const {
+ return m_impl.m_minLoadFactor;
+}
+
+void
+NdbDictionary::Table::setMaxLoadFactor(int lf){
+ m_impl.m_maxLoadFactor = lf;
+}
+
+int
+NdbDictionary::Table::getMaxLoadFactor() const {
+ return m_impl.m_maxLoadFactor;
+}
+
+int
+NdbDictionary::Table::getNoOfColumns() const {
+ return m_impl.m_columns.size();
+}
+
+int
+NdbDictionary::Table::getNoOfPrimaryKeys() const {
+ return m_impl.m_noOfKeys;
+}
+
+const char*
+NdbDictionary::Table::getPrimaryKey(int no) const {
+ int count = 0;
+ for (unsigned i = 0; i < m_impl.m_columns.size(); i++) {
+ if (m_impl.m_columns[i]->m_pk) {
+ if (count++ == no)
+ return m_impl.m_columns[i]->m_name.c_str();
+ }
+ }
+ return 0;
+}
+
+const void*
+NdbDictionary::Table::getFrmData() const {
+ return m_impl.m_frm.get_data();
+}
+
+Uint32
+NdbDictionary::Table::getFrmLength() const {
+ return m_impl.m_frm.length();
+}
+
+void
+NdbDictionary::Table::setFrm(const void* data, Uint32 len){
+ m_impl.m_frm.assign(data, len);
+}
+
+NdbDictionary::Object::Status
+NdbDictionary::Table::getObjectStatus() const {
+ return m_impl.m_status;
+}
+
+int
+NdbDictionary::Table::getObjectVersion() const {
+ return m_impl.m_version;
+}
+
+bool
+NdbDictionary::Table::equal(const NdbDictionary::Table & col) const {
+ return m_impl.equal(col.m_impl);
+}
+
+int
+NdbDictionary::Table::getRowSizeInBytes() const {
+ int sz = 0;
+ for(int i = 0; i<getNoOfColumns(); i++){
+ const NdbDictionary::Column * c = getColumn(i);
+ sz += (c->getSizeInBytes()+ 3) / 4;
+ }
+ return sz * 4;
+}
+
+int
+NdbDictionary::Table::getReplicaCount() const {
+ return m_impl.m_replicaCount;
+}
+
+int
+NdbDictionary::Table::createTableInDb(Ndb* pNdb, bool equalOk) const {
+ const NdbDictionary::Table * pTab =
+ pNdb->getDictionary()->getTable(getName());
+ if(pTab != 0 && equal(* pTab))
+ return 0;
+ if(pTab != 0 && !equal(* pTab))
+ return -1;
+ return pNdb->getDictionary()->createTable(* this);
+}
+
+/*****************************************************************
+ * Index facade
+ */
+NdbDictionary::Index::Index(const char * name)
+ : m_impl(* new NdbIndexImpl(* this))
+{
+ setName(name);
+}
+
+NdbDictionary::Index::Index(NdbIndexImpl & impl)
+ : m_impl(impl)
+{
+}
+
+NdbDictionary::Index::~Index(){
+ NdbIndexImpl * tmp = &m_impl;
+ if(this != tmp){
+ delete tmp;
+ }
+}
+
+void
+NdbDictionary::Index::setName(const char * name){
+ m_impl.setName(name);
+}
+
+const char *
+NdbDictionary::Index::getName() const {
+ return m_impl.getName();
+}
+
+void
+NdbDictionary::Index::setTable(const char * table){
+ m_impl.setTable(table);
+}
+
+const char *
+NdbDictionary::Index::getTable() const {
+ return m_impl.getTable();
+}
+
+unsigned
+NdbDictionary::Index::getNoOfColumns() const {
+ return m_impl.m_columns.size();
+}
+
+int
+NdbDictionary::Index::getNoOfIndexColumns() const {
+ return m_impl.m_columns.size();
+}
+
+const NdbDictionary::Column *
+NdbDictionary::Index::getColumn(unsigned no) const {
+ if(no < m_impl.m_columns.size())
+ return m_impl.m_columns[no];
+ return NULL;
+}
+
+const char *
+NdbDictionary::Index::getIndexColumn(int no) const {
+ const NdbDictionary::Column* col = getColumn(no);
+
+ if (col)
+ return col->getName();
+ else
+ return NULL;
+}
+
+void
+NdbDictionary::Index::addColumn(const Column & c){
+ NdbColumnImpl* col = new NdbColumnImpl;
+ (* col) = NdbColumnImpl::getImpl(c);
+ m_impl.m_columns.push_back(col);
+}
+
+void
+NdbDictionary::Index::addColumnName(const char * name){
+ const Column c(name);
+ addColumn(c);
+}
+
+void
+NdbDictionary::Index::addIndexColumn(const char * name){
+ const Column c(name);
+ addColumn(c);
+}
+
+void
+NdbDictionary::Index::addColumnNames(unsigned noOfNames, const char ** names){
+ for(unsigned i = 0; i < noOfNames; i++) {
+ const Column c(names[i]);
+ addColumn(c);
+ }
+}
+
+void
+NdbDictionary::Index::addIndexColumns(int noOfNames, const char ** names){
+ for(int i = 0; i < noOfNames; i++) {
+ const Column c(names[i]);
+ addColumn(c);
+ }
+}
+
+void
+NdbDictionary::Index::setType(NdbDictionary::Index::Type t){
+ m_impl.m_type = t;
+}
+
+NdbDictionary::Index::Type
+NdbDictionary::Index::getType() const {
+ return m_impl.m_type;
+}
+
+void
+NdbDictionary::Index::setLogging(bool val){
+ m_impl.m_logging = val;
+}
+
+bool
+NdbDictionary::Index::getLogging() const {
+ return m_impl.m_logging;
+}
+
+NdbDictionary::Object::Status
+NdbDictionary::Index::getObjectStatus() const {
+ return m_impl.m_status;
+}
+
+int
+NdbDictionary::Index::getObjectVersion() const {
+ return m_impl.m_version;
+}
+
+/*****************************************************************
+ * Event facade
+ */
+NdbDictionary::Event::Event(const char * name)
+ : m_impl(* new NdbEventImpl(* this))
+{
+ setName(name);
+}
+
+NdbDictionary::Event::Event(const char * name, const Table& table)
+ : m_impl(* new NdbEventImpl(* this))
+{
+ setName(name);
+ setTable(table);
+}
+
+NdbDictionary::Event::Event(NdbEventImpl & impl)
+ : m_impl(impl)
+{
+}
+
+NdbDictionary::Event::~Event()
+{
+ NdbEventImpl * tmp = &m_impl;
+ if(this != tmp){
+ delete tmp;
+ }
+}
+
+void
+NdbDictionary::Event::setName(const char * name)
+{
+ m_impl.setName(name);
+}
+
+const char *
+NdbDictionary::Event::getName() const
+{
+ return m_impl.getName();
+}
+
+void
+NdbDictionary::Event::setTable(const Table& table)
+{
+ m_impl.setTable(table);
+}
+
+void
+NdbDictionary::Event::setTable(const char * table)
+{
+ m_impl.setTable(table);
+}
+
+const char*
+NdbDictionary::Event::getTableName() const
+{
+ return m_impl.getTableName();
+}
+
+void
+NdbDictionary::Event::addTableEvent(const TableEvent t)
+{
+ m_impl.addTableEvent(t);
+}
+
+void
+NdbDictionary::Event::setDurability(EventDurability d)
+{
+ m_impl.setDurability(d);
+}
+
+NdbDictionary::Event::EventDurability
+NdbDictionary::Event::getDurability() const
+{
+ return m_impl.getDurability();
+}
+
+void
+NdbDictionary::Event::addColumn(const Column & c){
+ NdbColumnImpl* col = new NdbColumnImpl;
+ (* col) = NdbColumnImpl::getImpl(c);
+ m_impl.m_columns.push_back(col);
+}
+
+void
+NdbDictionary::Event::addEventColumn(unsigned attrId)
+{
+ m_impl.m_attrIds.push_back(attrId);
+}
+
+void
+NdbDictionary::Event::addEventColumn(const char * name)
+{
+ const Column c(name);
+ addColumn(c);
+}
+
+void
+NdbDictionary::Event::addEventColumns(int n, const char ** names)
+{
+ for (int i = 0; i < n; i++)
+ addEventColumn(names[i]);
+}
+
+int NdbDictionary::Event::getNoOfEventColumns() const
+{
+ return m_impl.getNoOfEventColumns();
+}
+
+NdbDictionary::Object::Status
+NdbDictionary::Event::getObjectStatus() const
+{
+ return m_impl.m_status;
+}
+
+int
+NdbDictionary::Event::getObjectVersion() const
+{
+ return m_impl.m_version;
+}
+
+void NdbDictionary::Event::print()
+{
+ m_impl.print();
+}
+
+/*****************************************************************
+ * Dictionary facade
+ */
+NdbDictionary::Dictionary::Dictionary(Ndb & ndb)
+ : m_impl(* new NdbDictionaryImpl(ndb, *this))
+{
+}
+
+NdbDictionary::Dictionary::Dictionary(NdbDictionaryImpl & impl)
+ : m_impl(impl)
+{
+}
+NdbDictionary::Dictionary::~Dictionary(){
+ NdbDictionaryImpl * tmp = &m_impl;
+ if(this != tmp){
+ delete tmp;
+ }
+}
+
+int
+NdbDictionary::Dictionary::createTable(const Table & t){
+ return m_impl.createTable(NdbTableImpl::getImpl(t));
+}
+
+int
+NdbDictionary::Dictionary::dropTable(Table & t){
+ return m_impl.dropTable(NdbTableImpl::getImpl(t));
+}
+
+int
+NdbDictionary::Dictionary::dropTable(const char * name){
+ return m_impl.dropTable(name);
+}
+
+int
+NdbDictionary::Dictionary::alterTable(const Table & t){
+ return m_impl.alterTable(NdbTableImpl::getImpl(t));
+}
+
+const NdbDictionary::Table *
+NdbDictionary::Dictionary::getTable(const char * name, void **data) const
+{
+ NdbTableImpl * t = m_impl.getTable(name, data);
+ if(t)
+ return t->m_facade;
+ return 0;
+}
+
+void NdbDictionary::Dictionary::set_local_table_data_size(unsigned sz)
+{
+ m_impl.m_local_table_data_size= sz;
+}
+
+const NdbDictionary::Table *
+NdbDictionary::Dictionary::getTable(const char * name) const
+{
+ return getTable(name, 0);
+}
+
+void
+NdbDictionary::Dictionary::invalidateTable(const char * name){
+ NdbTableImpl * t = m_impl.getTable(name);
+ if(t)
+ m_impl.invalidateObject(* t);
+}
+
+void
+NdbDictionary::Dictionary::removeCachedTable(const char * name){
+ NdbTableImpl * t = m_impl.getTable(name);
+ if(t)
+ m_impl.removeCachedObject(* t);
+}
+
+int
+NdbDictionary::Dictionary::createIndex(const Index & ind)
+{
+ return m_impl.createIndex(NdbIndexImpl::getImpl(ind));
+}
+
+int
+NdbDictionary::Dictionary::dropIndex(const char * indexName,
+ const char * tableName)
+{
+ return m_impl.dropIndex(indexName, tableName);
+}
+
+const NdbDictionary::Index *
+NdbDictionary::Dictionary::getIndex(const char * indexName,
+ const char * tableName) const
+{
+ NdbIndexImpl * i = m_impl.getIndex(indexName, tableName);
+ if(i)
+ return i->m_facade;
+ return 0;
+}
+
+void
+NdbDictionary::Dictionary::invalidateIndex(const char * indexName,
+ const char * tableName){
+ NdbIndexImpl * i = m_impl.getIndex(indexName, tableName);
+ if(i) {
+ assert(i->m_table != 0);
+ m_impl.invalidateObject(* i->m_table);
+ }
+}
+
+void
+NdbDictionary::Dictionary::removeCachedIndex(const char * indexName,
+ const char * tableName){
+ NdbIndexImpl * i = m_impl.getIndex(indexName, tableName);
+ if(i) {
+ assert(i->m_table != 0);
+ m_impl.removeCachedObject(* i->m_table);
+ }
+}
+
+const NdbDictionary::Table *
+NdbDictionary::Dictionary::getIndexTable(const char * indexName,
+ const char * tableName) const
+{
+ NdbIndexImpl * i = m_impl.getIndex(indexName, tableName);
+ NdbTableImpl * t = m_impl.getTable(tableName);
+ if(i && t) {
+ NdbTableImpl * it = m_impl.getIndexTable(i, t);
+ return it->m_facade;
+ }
+ return 0;
+}
+
+
+int
+NdbDictionary::Dictionary::createEvent(const Event & ev)
+{
+ return m_impl.createEvent(NdbEventImpl::getImpl(ev));
+}
+
+int
+NdbDictionary::Dictionary::dropEvent(const char * eventName)
+{
+ return m_impl.dropEvent(eventName);
+}
+
+const NdbDictionary::Event *
+NdbDictionary::Dictionary::getEvent(const char * eventName)
+{
+ NdbEventImpl * t = m_impl.getEvent(eventName);
+ if(t)
+ return t->m_facade;
+ return 0;
+}
+
+int
+NdbDictionary::Dictionary::listObjects(List& list, Object::Type type)
+{
+ return m_impl.listObjects(list, type);
+}
+
+int
+NdbDictionary::Dictionary::listObjects(List& list, Object::Type type) const
+{
+ return m_impl.listObjects(list, type);
+}
+
+int
+NdbDictionary::Dictionary::listIndexes(List& list, const char * tableName)
+{
+ const NdbDictionary::Table* tab= getTable(tableName);
+ if(tab == 0)
+ {
+ return -1;
+ }
+ return m_impl.listIndexes(list, tab->getTableId());
+}
+
+int
+NdbDictionary::Dictionary::listIndexes(List& list,
+ const char * tableName) const
+{
+ const NdbDictionary::Table* tab= getTable(tableName);
+ if(tab == 0)
+ {
+ return -1;
+ }
+ return m_impl.listIndexes(list, tab->getTableId());
+}
+
+const struct NdbError &
+NdbDictionary::Dictionary::getNdbError() const {
+ return m_impl.getNdbError();
+}
+
+// printers
+
+NdbOut&
+operator<<(NdbOut& out, const NdbDictionary::Column& col)
+{
+ const CHARSET_INFO *cs = col.getCharset();
+ const char *csname = cs ? cs->name : "?";
+ out << col.getName() << " ";
+ switch (col.getType()) {
+ case NdbDictionary::Column::Tinyint:
+ out << "Tinyint";
+ break;
+ case NdbDictionary::Column::Tinyunsigned:
+ out << "Tinyunsigned";
+ break;
+ case NdbDictionary::Column::Smallint:
+ out << "Smallint";
+ break;
+ case NdbDictionary::Column::Smallunsigned:
+ out << "Smallunsigned";
+ break;
+ case NdbDictionary::Column::Mediumint:
+ out << "Mediumint";
+ break;
+ case NdbDictionary::Column::Mediumunsigned:
+ out << "Mediumunsigned";
+ break;
+ case NdbDictionary::Column::Int:
+ out << "Int";
+ break;
+ case NdbDictionary::Column::Unsigned:
+ out << "Unsigned";
+ break;
+ case NdbDictionary::Column::Bigint:
+ out << "Bigint";
+ break;
+ case NdbDictionary::Column::Bigunsigned:
+ out << "Bigunsigned";
+ break;
+ case NdbDictionary::Column::Float:
+ out << "Float";
+ break;
+ case NdbDictionary::Column::Double:
+ out << "Double";
+ break;
+ case NdbDictionary::Column::Olddecimal:
+ out << "Olddecimal(" << col.getPrecision() << "," << col.getScale() << ")";
+ break;
+ case NdbDictionary::Column::Olddecimalunsigned:
+ out << "Olddecimalunsigned(" << col.getPrecision() << "," << col.getScale() << ")";
+ break;
+ case NdbDictionary::Column::Decimal:
+ out << "Decimal(" << col.getPrecision() << "," << col.getScale() << ")";
+ break;
+ case NdbDictionary::Column::Decimalunsigned:
+ out << "Decimalunsigned(" << col.getPrecision() << "," << col.getScale() << ")";
+ break;
+ case NdbDictionary::Column::Char:
+ out << "Char(" << col.getLength() << ";" << csname << ")";
+ break;
+ case NdbDictionary::Column::Varchar:
+ out << "Varchar(" << col.getLength() << ";" << csname << ")";
+ break;
+ case NdbDictionary::Column::Binary:
+ out << "Binary(" << col.getLength() << ")";
+ break;
+ case NdbDictionary::Column::Varbinary:
+ out << "Varbinary(" << col.getLength() << ")";
+ break;
+ case NdbDictionary::Column::Datetime:
+ out << "Datetime";
+ break;
+ case NdbDictionary::Column::Date:
+ out << "Date";
+ break;
+ case NdbDictionary::Column::Blob:
+ out << "Blob(" << col.getInlineSize() << "," << col.getPartSize()
+ << ";" << col.getStripeSize() << ")";
+ break;
+ case NdbDictionary::Column::Text:
+ out << "Text(" << col.getInlineSize() << "," << col.getPartSize()
+ << ";" << col.getStripeSize() << ";" << csname << ")";
+ break;
+ case NdbDictionary::Column::Time:
+ out << "Time";
+ break;
+ case NdbDictionary::Column::Year:
+ out << "Year";
+ break;
+ case NdbDictionary::Column::Timestamp:
+ out << "Timestamp";
+ break;
+ case NdbDictionary::Column::Undefined:
+ out << "Undefined";
+ break;
+ case NdbDictionary::Column::Bit:
+ out << "Bit(" << col.getLength() << ")";
+ break;
+ case NdbDictionary::Column::Longvarchar:
+ out << "Longvarchar(" << col.getLength() << ";" << csname << ")";
+ break;
+ case NdbDictionary::Column::Longvarbinary:
+ out << "Longvarbinary(" << col.getLength() << ")";
+ break;
+ default:
+ out << "Type" << (Uint32)col.getType();
+ break;
+ }
+ // show unusual (non-MySQL) array size
+ if (col.getLength() != 1) {
+ switch (col.getType()) {
+ case NdbDictionary::Column::Char:
+ case NdbDictionary::Column::Varchar:
+ case NdbDictionary::Column::Binary:
+ case NdbDictionary::Column::Varbinary:
+ case NdbDictionary::Column::Blob:
+ case NdbDictionary::Column::Text:
+ case NdbDictionary::Column::Bit:
+ case NdbDictionary::Column::Longvarchar:
+ case NdbDictionary::Column::Longvarbinary:
+ break;
+ default:
+ out << " [" << col.getLength() << "]";
+ break;
+ }
+ }
+ if (col.getPrimaryKey())
+ out << " PRIMARY KEY";
+ else if (! col.getNullable())
+ out << " NOT NULL";
+ else
+ out << " NULL";
+
+ if(col.getDistributionKey())
+ out << " DISTRIBUTION KEY";
+
+ return out;
+}
+
+const NdbDictionary::Column * NdbDictionary::Column::FRAGMENT = 0;
+const NdbDictionary::Column * NdbDictionary::Column::FRAGMENT_MEMORY = 0;
+const NdbDictionary::Column * NdbDictionary::Column::ROW_COUNT = 0;
+const NdbDictionary::Column * NdbDictionary::Column::COMMIT_COUNT = 0;
+const NdbDictionary::Column * NdbDictionary::Column::ROW_SIZE = 0;
+const NdbDictionary::Column * NdbDictionary::Column::RANGE_NO = 0;