mirror of
https://github.com/MariaDB/server.git
synced 2025-05-27 01:57:48 +03:00
mysql-test/r/ndb_index_ordered.result: fix old decimal type mysql vs ndb (re-commit 3) mysql-test/t/ndb_index_ordered.test: fix old decimal type mysql vs ndb (re-commit 3) ndb/include/kernel/signaldata/DictTabInfo.hpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/include/ndbapi/NdbDictionary.hpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/include/util/NdbSqlUtil.hpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/src/common/util/NdbSqlUtil.cpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/src/ndbapi/NdbDictionary.cpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/src/ndbapi/NdbDictionaryImpl.cpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/src/ndbapi/NdbRecAttr.cpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/test/include/NdbSchemaOp.hpp: fix old decimal type mysql vs ndb (re-commit 3) ndb/tools/restore/consumer.cpp: fix old decimal type mysql vs ndb (re-commit 3) sql/ha_ndbcluster.cc: fix old decimal type mysql vs ndb (re-commit 3)
986 lines
20 KiB
C++
986 lines
20 KiB
C++
/* 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::setTupleKey(bool val){
|
|
m_impl.m_tupleKey = val;
|
|
}
|
|
|
|
bool
|
|
NdbDictionary::Column::getTupleKey() const {
|
|
return m_impl.m_tupleKey;
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Column::setDistributionKey(bool val){
|
|
m_impl.m_distributionKey = val;
|
|
}
|
|
|
|
bool
|
|
NdbDictionary::Column::getDistributionKey() const{
|
|
return m_impl.m_distributionKey;
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Column::setDistributionGroup(bool val, int bits){
|
|
m_impl.m_distributionGroup = val;
|
|
m_impl.m_distributionGroupBits = bits;
|
|
}
|
|
|
|
bool
|
|
NdbDictionary::Column::getDistributionGroup() const {
|
|
return m_impl.m_distributionGroup;
|
|
}
|
|
|
|
int
|
|
NdbDictionary::Column::getDistributionGroupBits() const{
|
|
return m_impl.m_distributionGroupBits;
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Column::setIndexOnlyStorage(bool val){
|
|
m_impl.m_indexOnly = val;
|
|
}
|
|
|
|
bool
|
|
NdbDictionary::Column::getIndexOnlyStorage() const {
|
|
return m_impl.m_indexOnly;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
/*****************************************************************
|
|
* 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);
|
|
const NdbColumnImpl & col = NdbColumnImpl::getImpl(* c);
|
|
sz += (((col.m_attrSize * col.m_arraySize) + 3) / 4);
|
|
}
|
|
return sz * 4;
|
|
}
|
|
|
|
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(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);
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Event::setTable(const char * table)
|
|
{
|
|
m_impl.setTable(table);
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Event::addTableEvent(const TableEvent t)
|
|
{
|
|
m_impl.addTableEvent(t);
|
|
}
|
|
|
|
void
|
|
NdbDictionary::Event::setDurability(const EventDurability d)
|
|
{
|
|
m_impl.setDurability(d);
|
|
}
|
|
|
|
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]);
|
|
}
|
|
|
|
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){
|
|
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){
|
|
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)
|
|
{
|
|
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)
|
|
{
|
|
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::listIndexes(List& list, const char * tableName)
|
|
{
|
|
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::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;
|
|
default:
|
|
out << "Type" << (Uint32)col.getType();
|
|
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::ROW_COUNT = 0;
|
|
const NdbDictionary::Column * NdbDictionary::Column::COMMIT_COUNT = 0;
|
|
|