summaryrefslogtreecommitdiff
path: root/ndb/src/client/odbc/codegen/Code_column.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/src/client/odbc/codegen/Code_column.hpp')
-rw-r--r--ndb/src/client/odbc/codegen/Code_column.hpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/ndb/src/client/odbc/codegen/Code_column.hpp b/ndb/src/client/odbc/codegen/Code_column.hpp
new file mode 100644
index 00000000000..af0dcea690d
--- /dev/null
+++ b/ndb/src/client/odbc/codegen/Code_column.hpp
@@ -0,0 +1,122 @@
+/* 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 */
+
+#ifndef ODBC_CODEGEN_Code_column_hpp
+#define ODBC_CODEGEN_Code_column_hpp
+
+#include <common/common.hpp>
+#include <common/DataType.hpp>
+#include "Code_base.hpp"
+
+class DictColumn;
+class Plan_table;
+
+/**
+ * @class Plan_column
+ * @brief Abstract base class for columns
+ */
+class Plan_column {
+public:
+ enum Type {
+ Type_expr = 1,
+ Type_dml = 2,
+ Type_ddl = 3, // new columns in create table
+ Type_idx = 4 // old columns in create index
+ };
+ Plan_column(Type type, const BaseString& name);
+ virtual ~Plan_column() = 0;
+ void analyzeColumn(Ctx& ctx, Plan_base::Ctl& ctl);
+ // attributes
+ const BaseString& getName() const;
+ const BaseString& getCname() const;
+ const char* getPrintName() const;
+ void setCname(const BaseString& cname);
+ const DictColumn& dictColumn() const;
+ const SqlType& sqlType() const;
+protected:
+ friend class Plan_table;
+ friend class Plan_comp_op;
+ Type m_type;
+ BaseString m_name;
+ BaseString m_cname;
+ BaseString m_printName;
+ DictColumn* m_dictColumn;
+ /**
+ * Resolve to table and operational position (for example
+ * column number in scan query).
+ */
+ Plan_table* m_resTable;
+ unsigned m_resPos;
+ SqlType m_sqlType;
+};
+
+inline
+Plan_column::Plan_column(Type type, const BaseString& name) :
+ m_type(type),
+ m_name(name),
+ m_printName(name),
+ m_dictColumn(0),
+ m_resTable(0),
+ m_resPos(0)
+{
+}
+
+inline const BaseString&
+Plan_column::getName() const
+{
+ return m_name;
+}
+
+inline const BaseString&
+Plan_column::getCname() const
+{
+ return m_cname;
+}
+
+inline const char*
+Plan_column::getPrintName() const
+{
+ return m_printName.c_str();
+}
+
+inline void
+Plan_column::setCname(const BaseString& cname)
+{
+ m_cname.assign(cname);
+ if (m_cname.empty())
+ m_printName.assign(m_name);
+ else {
+ m_printName.assign(m_cname);
+ m_printName.append(".");
+ m_printName.append(m_name);
+ }
+}
+
+inline const DictColumn&
+Plan_column::dictColumn() const
+{
+ ctx_assert(m_dictColumn != 0);
+ return *m_dictColumn;
+}
+
+inline const SqlType&
+Plan_column::sqlType() const
+{
+ ctx_assert(m_sqlType.type() != SqlType::Undef);
+ return m_sqlType;
+}
+
+#endif