1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
/*
* Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
*
* 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 St, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef _DB_OBJECT_MATCH_H_
#define _DB_OBJECT_MATCH_H_
#include "grtpp_util.h"
#include "wbpublic_public_interface.h"
#include "base/string_utilities.h"
#include "grt/common.h"
#include "grtdb/charset_utils.h"
#include "grtsqlparser/sql_facade.h"
#include "db_object_helpers.h"
namespace sql
{
class DatabaseMetaData;
}
namespace grt
{
struct WBPUBLICBACKEND_PUBLIC_FUNC DbObjectMatchAlterOmf : public Omf
{
virtual bool less(const ValueRef& , const ValueRef&) const;
virtual bool equal(const ValueRef& , const ValueRef&) const;
};
typedef boost::function<bool (const ValueRef obj1, const ValueRef obj2, const std::string name, grt::GRT* grt)> comparison_rule;
class WBPUBLICBACKEND_PUBLIC_FUNC NormalizedComparer
{
protected:
bool comment_compare(const ValueRef obj1, const ValueRef obj2, const std::string& name)const;
std::map<std::string,std::list<comparison_rule> > rules;
grt::GRT* _grt;
int _maxTableCommentLength;
int _maxIndexCommentLength;
int _maxColumnCommentLength;
bool _case_sensitive;
bool _skip_routine_definer;
void load_rules();
public:
void init_omf(Omf* omf);
void load_db_options(sql::DatabaseMetaData *dbc_meta);
NormalizedComparer(grt::GRT* grt, const grt::DictRef options = grt::DictRef());
void add_comparison_rule(const std::string& name, comparison_rule rule){rules[name].push_back(rule);};
bool normalizedComparison(const ValueRef obj1, const ValueRef obj2, const std::string name);
grt::DictRef get_options_dict()const;
bool is_case_sensitive()const {return _case_sensitive;};
bool skip_routine_definer() const { return _skip_routine_definer; };
};
} // namespace grt
#endif // _DB_OBJECT_MATCH_H_
|