You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-09-02 12:41:17 +03:00
294 lines
6.3 KiB
C++
294 lines
6.3 KiB
C++
/* Copyright (C) 2014 InfiniDB, Inc.
|
|
|
|
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 Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
/***********************************************************************
|
|
* $Id: tabledef.cpp 9210 2013-01-21 14:10:42Z rdempsey $
|
|
*
|
|
*
|
|
***********************************************************************/
|
|
|
|
#include <iostream>
|
|
#define DDLPKG_DLLEXPORT
|
|
#include "ddlpkg.h"
|
|
#undef DDLPKG_DLLEXPORT
|
|
|
|
namespace ddlpackage
|
|
{
|
|
using namespace std;
|
|
|
|
|
|
TableDef::~TableDef()
|
|
{
|
|
{
|
|
ColumnDefList::iterator itr;
|
|
for(itr=fColumns.begin(); itr != fColumns.end(); itr++) {
|
|
delete *itr;
|
|
}
|
|
}
|
|
{
|
|
TableConstraintDefList::iterator itr;
|
|
for(itr=fConstraints.begin(); itr != fConstraints.end(); itr++) {
|
|
delete *itr;
|
|
}
|
|
}
|
|
|
|
delete fQualifiedName;
|
|
}
|
|
|
|
|
|
TableDef::TableDef(QualifiedName* name, TableElementList* elements, TableOptionMap* options) :
|
|
fQualifiedName(name)
|
|
{
|
|
if(options) {
|
|
fOptions = *options;
|
|
delete options;
|
|
}
|
|
|
|
ColumnDef *column;
|
|
TableConstraintDef *constraint;
|
|
|
|
/* When parsing, it is necessary to collect ColumnDefs and
|
|
TableConstraintDefs as TableElements. Here we separate
|
|
them out into separately typed lists.
|
|
*/
|
|
TableElementList::iterator itr;
|
|
for(itr = elements->begin(); itr != elements->end(); ++itr) {
|
|
column = dynamic_cast<ColumnDef*>(*itr);
|
|
if(column) {
|
|
fColumns.push_back(column);
|
|
}
|
|
else {
|
|
constraint = dynamic_cast<TableConstraintDef *>(*itr);
|
|
if(constraint) {
|
|
fConstraints.push_back(constraint);
|
|
}
|
|
}
|
|
}
|
|
|
|
delete elements;
|
|
}
|
|
|
|
|
|
/** \brief Put to ostream. */
|
|
ostream& operator<<(ostream& os, const TableDef& tableDef)
|
|
{
|
|
os << "CreateTable ";
|
|
if(tableDef.fQualifiedName->fSchema != "")
|
|
//cout << tableDef.fQualifiedName->fSchema << ".";
|
|
os << tableDef.fQualifiedName->fName
|
|
<< " " << tableDef.fConstraints.size()
|
|
<< " table constraints"
|
|
<< endl;
|
|
|
|
{
|
|
ColumnDefList::const_iterator itr;
|
|
for(itr = tableDef.fColumns.begin();
|
|
itr != tableDef.fColumns.end(); ++itr)
|
|
{
|
|
ColumnDef* col = *itr;
|
|
os << *col << endl;
|
|
}
|
|
}
|
|
|
|
|
|
{
|
|
TableConstraintDefList::const_iterator itr;
|
|
for(itr = tableDef.fConstraints.begin();
|
|
itr != tableDef.fConstraints.end();
|
|
++itr)
|
|
{
|
|
os << (**itr);
|
|
}
|
|
}
|
|
|
|
pair<string, string> oval;
|
|
TableOptionMap::const_iterator oitr;
|
|
os << "Table Options" << endl;
|
|
if(!tableDef.fOptions.empty()) {
|
|
TableOptionMap::const_iterator oitr;
|
|
for(oitr = tableDef.fOptions.begin();
|
|
oitr != tableDef.fOptions.end(); ++oitr) {
|
|
oval = *oitr;
|
|
os << " " << oval.first << "=" << oval.second << endl;
|
|
}
|
|
}
|
|
|
|
return os;
|
|
}
|
|
|
|
|
|
|
|
|
|
ostream& operator<<(ostream &os, const TableConstraintDef& constraint)
|
|
{
|
|
return constraint.put(os);
|
|
}
|
|
|
|
std::ostream& TableConstraintDef::put(std::ostream& os) const
|
|
{
|
|
os << "No!!!" << endl;
|
|
|
|
return os;
|
|
}
|
|
|
|
|
|
TableConstraintDef::TableConstraintDef(DDL_CONSTRAINTS cType) :
|
|
fConstraintType(cType)
|
|
{
|
|
}
|
|
|
|
TableConstraintDef::TableConstraintDef() :
|
|
fConstraintType(DDL_INVALID_CONSTRAINT)
|
|
{
|
|
}
|
|
|
|
TableCheckConstraintDef::TableCheckConstraintDef(const char *check) :
|
|
TableConstraintDef(DDL_CHECK),
|
|
fCheck(check)
|
|
{
|
|
}
|
|
std::ostream& TableCheckConstraintDef::put(std::ostream& os) const
|
|
{
|
|
os << "Constraint: "
|
|
<< ConstraintString[fConstraintType] << " ";
|
|
os << "\"" << fCheck << "\"";
|
|
os << endl;
|
|
|
|
return os;
|
|
}
|
|
|
|
|
|
TableUniqueConstraintDef::TableUniqueConstraintDef(ColumnNameList *columns) :
|
|
TableConstraintDef(DDL_UNIQUE),
|
|
fColumnNameList(*columns)
|
|
{
|
|
delete columns;
|
|
}
|
|
std::ostream& TableUniqueConstraintDef::put(std::ostream& os) const
|
|
{
|
|
os << "Constraint: "
|
|
<< fName << " "
|
|
<< ConstraintString[fConstraintType] << " ";
|
|
|
|
ColumnNameList::const_iterator itr;
|
|
os << "(";
|
|
for(itr = fColumnNameList.begin();
|
|
itr != fColumnNameList.end();
|
|
++itr)
|
|
{
|
|
os << *itr << " ";
|
|
}
|
|
os << ")";
|
|
return os;
|
|
}
|
|
|
|
TablePrimaryKeyConstraintDef::TablePrimaryKeyConstraintDef(ColumnNameList *columns) :
|
|
TableConstraintDef(DDL_PRIMARY_KEY),
|
|
fColumnNameList(*columns)
|
|
{
|
|
delete columns;
|
|
}
|
|
std::ostream& TablePrimaryKeyConstraintDef::put(std::ostream& os) const
|
|
{
|
|
os << "Constraint: "
|
|
<< fName << " "
|
|
<< ConstraintString[fConstraintType] << " ";
|
|
|
|
ColumnNameList::const_iterator itr;
|
|
os << "(";
|
|
for(itr = fColumnNameList.begin();
|
|
itr != fColumnNameList.end();
|
|
++itr)
|
|
{
|
|
os << *itr << " ";
|
|
}
|
|
os << ")";
|
|
|
|
return os;
|
|
}
|
|
|
|
TableReferencesConstraintDef::TableReferencesConstraintDef
|
|
(ColumnNameList *columns,
|
|
QualifiedName *tableName,
|
|
ColumnNameList *foreignColumns,
|
|
DDL_MATCH_TYPE matchType,
|
|
ReferentialAction *refAction) :
|
|
TableConstraintDef(DDL_REFERENCES),
|
|
fColumns(*columns),
|
|
fTableName(tableName),
|
|
fForeignColumns(*foreignColumns),
|
|
fMatchType(matchType),
|
|
fRefAction(refAction)
|
|
{
|
|
delete columns;
|
|
delete foreignColumns;
|
|
}
|
|
std::ostream& TableReferencesConstraintDef::put(std::ostream& os) const
|
|
{
|
|
os << "Constraint: "
|
|
<< fName << " "
|
|
<< ConstraintString[fConstraintType] << " ";
|
|
|
|
ColumnNameList::const_iterator itr;
|
|
os << "lcols (";
|
|
for(itr = fColumns.begin();
|
|
itr != fColumns.end();
|
|
++itr)
|
|
{
|
|
os << *itr << " ";
|
|
}
|
|
os << ")";
|
|
|
|
os << " ftable=" << *fTableName;
|
|
|
|
os << " ";
|
|
|
|
os << "fcols (";
|
|
for(itr = fForeignColumns.begin();
|
|
itr != fForeignColumns.end();
|
|
++itr)
|
|
{
|
|
os << *itr << " ";
|
|
}
|
|
os << ")";
|
|
|
|
return os;
|
|
}
|
|
std::ostream &operator<<(std::ostream& os, const ColumnNameList &columnNames)
|
|
{
|
|
ColumnNameList::const_iterator itr;
|
|
os << '(';
|
|
for(itr = columnNames.begin();
|
|
itr != columnNames.end();
|
|
++itr)
|
|
{
|
|
os << *itr << " ";
|
|
}
|
|
os << ')';
|
|
return os;
|
|
}
|
|
|
|
|
|
TableReferencesConstraintDef::~TableReferencesConstraintDef()
|
|
{
|
|
delete fTableName;
|
|
delete fRefAction;
|
|
}
|
|
|
|
}
|
|
|