summaryrefslogtreecommitdiff
path: root/odb/relational/mysql
diff options
context:
space:
mode:
Diffstat (limited to 'odb/relational/mysql')
-rw-r--r--odb/relational/mysql/common.cxx9
-rw-r--r--odb/relational/mysql/common.hxx6
-rw-r--r--odb/relational/mysql/header.cxx42
-rw-r--r--odb/relational/mysql/source.cxx147
4 files changed, 27 insertions, 177 deletions
diff --git a/odb/relational/mysql/common.cxx b/odb/relational/mysql/common.cxx
index 011bad7..6833ace 100644
--- a/odb/relational/mysql/common.cxx
+++ b/odb/relational/mysql/common.cxx
@@ -150,6 +150,13 @@ namespace relational
};
member_image_type::
+ member_image_type (base const& x)
+ : member_base::base (x), // virtual base
+ base (x)
+ {
+ }
+
+ member_image_type::
member_image_type (semantics::type* type,
string const& fq_type,
string const& key_prefix)
@@ -233,6 +240,8 @@ namespace relational
type_ = "details::buffer";
}
+ entry<member_image_type> member_image_type_;
+
//
// member_database_type
//
diff --git a/odb/relational/mysql/common.hxx b/odb/relational/mysql/common.hxx
index f6913ad..571ed51 100644
--- a/odb/relational/mysql/common.hxx
+++ b/odb/relational/mysql/common.hxx
@@ -81,12 +81,14 @@ namespace relational
}
};
- struct member_image_type: member_base
+ struct member_image_type: relational::member_image_type,
+ member_base
{
+ member_image_type (base const&);
member_image_type (semantics::type* type = 0,
string const& fq_type = string (),
string const& key_prefix = string ());
- string
+ virtual string
image_type (semantics::data_member&);
virtual void
diff --git a/odb/relational/mysql/header.cxx b/odb/relational/mysql/header.cxx
index bffb46d..189f005 100644
--- a/odb/relational/mysql/header.cxx
+++ b/odb/relational/mysql/header.cxx
@@ -15,39 +15,14 @@ namespace relational
{
namespace relational = relational::header;
- struct image_member: relational::image_member, member_base
+ struct image_member: relational::image_member_impl<sql_type>,
+ member_base
{
image_member (base const& x)
- : member_base::base (x), // virtual base
- base (x),
- member_base (x),
- member_image_type_ (base::type_override_,
- base::fq_type_override_,
- base::key_prefix_)
- {
- }
-
- virtual bool
- pre (member_info& mi)
- {
- if (container (mi))
- return false;
-
- image_type = member_image_type_.image_type (mi.m);
-
- if (var_override_.empty ())
- os << "// " << mi.m.name () << endl
- << "//" << endl;
-
- return true;
- }
-
- virtual void
- traverse_composite (member_info& mi)
- {
- os << image_type << " " << mi.var << "value;"
- << endl;
- }
+ : member_base::base (x), // virtual base
+ member_base::base_impl (x), // virtual base
+ base_impl (x),
+ member_base (x) {}
virtual void
traverse_integer (member_info& mi)
@@ -155,11 +130,6 @@ namespace relational
<< "my_bool " << mi.var << "null;"
<< endl;
}
-
- private:
- string image_type;
-
- member_image_type member_image_type_;
};
entry<image_member> image_member_;
}
diff --git a/odb/relational/mysql/source.cxx b/odb/relational/mysql/source.cxx
index 0df66db..bcc7f23 100644
--- a/odb/relational/mysql/source.cxx
+++ b/odb/relational/mysql/source.cxx
@@ -301,142 +301,14 @@ namespace relational
// grow
//
- struct grow_member: relational::grow_member, member_base
+ struct grow_member: relational::grow_member_impl<sql_type>,
+ member_base
{
grow_member (base const& x)
- : member_base::base (x), // virtual base
- base (x),
- member_base (x)
- {
- }
-
- virtual bool
- pre (member_info& mi)
- {
- if (container (mi))
- return false;
-
- // Ignore polymorphic id references; they are not returned by
- // the select statement.
- //
- if (mi.ptr != 0 && mi.m.count ("polymorphic-ref"))
- return false;
-
- ostringstream ostr;
- ostr << "t[" << index_ << "UL]";
- e = ostr.str ();
-
- if (var_override_.empty ())
- {
- os << "// " << mi.m.name () << endl
- << "//" << endl;
-
- semantics::class_* comp (composite (mi.t));
-
- // If the member is soft- added or deleted, check the version.
- //
- unsigned long long av (added (mi.m));
- unsigned long long dv (deleted (mi.m));
-
- // If this is a composite member, see if it is summarily
- // added/deleted.
- //
- if (comp != 0)
- {
- unsigned long long cav (added (*comp));
- unsigned long long cdv (deleted (*comp));
-
- if (cav != 0 && (av == 0 || av < cav))
- av = cav;
-
- if (cdv != 0 && (dv == 0 || dv > cdv))
- dv = cdv;
- }
-
- // If the addition/deletion version is the same as the section's,
- // then we don't need the test.
- //
- if (user_section* s = dynamic_cast<user_section*> (section_))
- {
- if (av == added (*s->member))
- av = 0;
-
- if (dv == deleted (*s->member))
- dv = 0;
- }
-
- if (av != 0 || dv != 0)
- {
- os << "if (";
-
- if (av != 0)
- os << "svm >= schema_version_migration (" << av << "ULL, true)";
-
- if (av != 0 && dv != 0)
- os << " &&" << endl;
-
- if (dv != 0)
- os << "svm <= schema_version_migration (" << dv << "ULL, true)";
-
- os << ")"
- << "{";
- }
- }
-
- return true;
- }
-
- virtual void
- post (member_info& mi)
- {
- semantics::class_* comp (composite (mi.t));
-
- if (var_override_.empty ())
- {
- unsigned long long av (added (mi.m));
- unsigned long long dv (deleted (mi.m));
-
- if (comp != 0)
- {
- unsigned long long cav (added (*comp));
- unsigned long long cdv (deleted (*comp));
-
- if (cav != 0 && (av == 0 || av < cav))
- av = cav;
-
- if (cdv != 0 && (dv == 0 || dv > cdv))
- dv = cdv;
- }
-
- if (user_section* s = dynamic_cast<user_section*> (section_))
- {
- if (av == added (*s->member))
- av = 0;
-
- if (dv == deleted (*s->member))
- dv = 0;
- }
-
- if (av != 0 || dv != 0)
- os << "}";
- }
-
- if (comp != 0)
- index_ += column_count (*comp).total;
- else
- index_++;
- }
-
- virtual void
- traverse_composite (member_info& mi)
- {
- os << "if (composite_value_traits< " << mi.fq_type () <<
- ", id_mysql >::grow (" << endl
- << "i." << mi.var << "value, t + " << index_ << "UL" <<
- (versioned (*composite (mi.t)) ? ", svm" : "") << "))" << endl
- << "grew = true;"
- << endl;
- }
+ : member_base::base (x), // virtual base
+ member_base::base_impl (x), // virtual base
+ base_impl (x),
+ member_base (x) {}
virtual void
traverse_integer (member_info&)
@@ -528,9 +400,6 @@ namespace relational
<< "grew = true;"
<< "}";
}
-
- private:
- string e;
};
entry<grow_member> grow_member_;
@@ -694,9 +563,9 @@ namespace relational
}
virtual void
- get_null (member_info& mi)
+ get_null (string const& var) const
{
- os << "i." << mi.var << "null";
+ os << "i." << var << "null";
}
virtual void