summaryrefslogtreecommitdiff
path: root/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/src/old_files/client/odbc/dictionary/DictTable.cpp')
-rw-r--r--ndb/src/old_files/client/odbc/dictionary/DictTable.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp b/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp
new file mode 100644
index 00000000000..4db7d3b3aec
--- /dev/null
+++ b/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp
@@ -0,0 +1,91 @@
+/* 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 <NdbApi.hpp>
+#include <common/common.hpp>
+#include <common/Ctx.hpp>
+#include <common/ConnArea.hpp>
+#include "DictSchema.hpp"
+#include "DictTable.hpp"
+#include "DictColumn.hpp"
+#include "DictColumn.hpp"
+
+DictTable::~DictTable()
+{
+ for (Columns::iterator i = m_columns.begin(); i != m_columns.end(); i++) {
+ delete *i;
+ *i = 0;
+ }
+ for (Indexes::iterator i = m_indexes.begin(); i != m_indexes.end(); i++) {
+ delete *i;
+ *i = 0;
+ }
+}
+
+DictColumn*
+DictTable::findColumn(const BaseString& name) const
+{
+ for (unsigned i = 1; i <= getSize(); i++) {
+ DictColumn* column = m_columns[i];
+ ctx_assert(column != 0);
+ if (strcmp(column->getName().c_str(), name.c_str()) == 0)
+ return column;
+ }
+ return 0;
+}
+
+DictColumn*
+DictTable::loadColumn(Ctx& ctx, unsigned position)
+{
+ Ndb* ndb = m_connArea.ndbObject();
+ NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary();
+ if (ndbDictionary == 0) {
+ ctx.pushStatus(ndb, "getDictionary");
+ return 0;
+ }
+ const NdbDictionary::Table* ndbTable = ndbDictionary->getTable(m_name.c_str());
+ ctx_assert(ndbTable != 0);
+ ctx_assert(position != 0);
+ NdbAttrId attrId = position - 1;
+ const NdbDictionary::Column* ndbColumn = ndbTable->getColumn(attrId);
+ ctx_assert(ndbColumn != 0);
+ SqlType sqlType(ctx, ndbColumn);
+ if (! ctx.ok())
+ return 0;
+ DictColumn* column = new DictColumn(m_connArea, ndbColumn->getName(), sqlType);
+ setColumn(position, column);
+ column->m_key = column->m_tupleId = false;
+ if (ndbColumn->getPrimaryKey())
+ column->m_key = true;
+ if (ndbColumn->getTupleKey())
+ column->m_key = column->m_tupleId = true;
+ if (column->m_key)
+ m_keys.push_back(column);
+ // props
+ const char* value;
+ column->m_autoIncrement = false;
+ if (ndbColumn->getAutoIncrement())
+ column->m_autoIncrement = true;
+ column->m_defaultValue = 0;
+ if ((value = ndbColumn->getDefaultValue()) != 0 && strlen(value) != 0)
+ column->m_defaultValue = strcpy(new char[strlen(value) + 1], value);
+ ctx_log4(("column %u %s keyFlag=%d idFlag=%d", position, ndbColumn->getName(), column->m_key, column->m_tupleId));
+ if (column->m_tupleId)
+ m_tupleId = position;
+ if (column->m_autoIncrement)
+ m_autoIncrement = position;
+ return column;
+}