A C++ DAL / ORM code generation framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

128 lines
4.3 KiB

/*
WORM - a DAL/ORM code generation framework
Copyright (C) 2011 Erik Winn <sidewalksoftware@gmail.com>
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 3 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, see <http://www.gnu.org/licenses/>.
*/
#include "wsqlforeignkey.h"
#include "wsqldatatype.h"
namespace WSql
{
/*! \class WSqlForeignKey
* \brief WSqlForeignKey provides an abstraction of a foreign key in a database
*
* This class provides a generic interface to foreign key relationships in databases
* including information about tables and columns to which the foreign key refers.
*
* \ingroup WSql
* \sa WSqlReferencedKey
*/
WSqlForeignKey::WSqlForeignKey()
{
}
WSqlForeignKey::WSqlForeignKey ( const WSqlForeignKey &other )
{
_keyName = other._keyName;
_tableName = other._tableName;
_schemaName = other._schemaName;
_columnName = other._columnName;
_referencedColumnName = other._referencedColumnName;
_referencedTableName = other._referencedTableName;
_referencedSchemaName = other._referencedSchemaName;
}
WSqlForeignKey::~WSqlForeignKey()
{
}
WSqlForeignKey &WSqlForeignKey::operator= ( const WSqlForeignKey &other )
{
_keyName = other._keyName;
_tableName = other._tableName;
_schemaName = other._schemaName;
_columnName = other._columnName;
_referencedColumnName = other._referencedColumnName;
_referencedTableName = other._referencedTableName;
_referencedSchemaName = other._referencedSchemaName;
return *this;
}
bool WSqlForeignKey::operator== ( const WSqlForeignKey &other ) const
{
return ( _keyName.compare ( other._keyName ) == 0
&& _tableName.compare ( other._tableName ) == 0
&& _schemaName.compare ( other._schemaName ) == 0
&& _columnName.compare ( other._columnName ) == 0
&& _referencedColumnName.compare ( other._referencedColumnName ) == 0
&& _referencedSchemaName.compare ( other._referencedSchemaName ) == 0
&& _referencedTableName.compare ( other._referencedTableName ) == 0 );
}
std::string WSqlForeignKey::referencedClassName() const
{
return WSqlDataType::tableNameToClass ( _referencedTableName );
}
std::string WSqlForeignKey::referingVariableName() const
{
//CRUDE HACK: FIXME ASAP .. rfind, check if at end ..
std::string strToReturn = columnName();
// std::cout << "strToReturn 0: " << strToReturn << std::endl;
size_t pos = WSqlDataType::iFind(strToReturn, "_id");
if(std::string::npos != pos)
{
strToReturn = strToReturn.erase(pos);
}
// std::cout << "strToReturn 1: " << strToReturn << std::endl;
strToReturn = WSqlDataType::columnNameToVariable(strToReturn);
// std::cout << "strToReturn 2: " << strToReturn << std::endl;
strToReturn[0] = toupper(strToReturn[0]);
// std::cout << "strToReturn 3: " << strToReturn << std::endl;
//\HACK
return strToReturn;
}
std::string WSqlForeignKey::referencedVariableName() const
{
return WSqlDataType::columnNameToVariable(referencedColumnName());
}
std::string WSqlForeignKey::referencedClassNamePlural() const
{
return WSqlDataType::toPlural ( referencedClassName() );
}
void WSqlForeignKey::dump() const
{
std::cerr << "***************** Foreign Key: *****************" << std::endl;
std::cerr << "keyName()" << keyName() << std::endl;
std::cerr << "tableName() " << tableName() << std::endl;
std::cerr << "schemaName() " << schemaName() << std::endl;
std::cerr << "columnName() " << columnName() << std::endl;
std::cerr << "referencedColumnName() " << referencedColumnName() << std::endl;
std::cerr << "referencedTableName() " << referencedTableName() << std::endl;
std::cerr << "referencedSchemaName() " << referencedSchemaName() << std::endl;
std::cerr << "referencedclassName() " << referencedClassName() << std::endl;
std::cerr << "referencedclassNamePlural() " << referencedClassNamePlural() << std::endl;
std::cerr << "*****************************************" << std::endl;
}
}//namespace WSql