aboutsummaryrefslogtreecommitdiff
path: root/odb/mysql/result.txx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/mysql/result.txx')
-rw-r--r--odb/mysql/result.txx25
1 files changed, 22 insertions, 3 deletions
diff --git a/odb/mysql/result.txx b/odb/mysql/result.txx
index 931ecf9..e1e8440 100644
--- a/odb/mysql/result.txx
+++ b/odb/mysql/result.txx
@@ -36,18 +36,37 @@ namespace odb
next ()
{
this->current (pointer_type ());
+
+ // If the result was cached the image can grow between calls
+ // to next() as a result of other statements execution.
+ //
+ if (statement_->cached ())
+ {
+ typename traits::image_type& im (statements_.image ());
+
+ if (im.version != statements_.image_version ())
+ {
+ binding& b (statements_.image_binding ());
+ traits::bind (b.bind, im);
+ statements_.image_version (im.version);
+ b.version++;
+ }
+ }
+
select_statement::result r (statement_->fetch ());
switch (r)
{
case select_statement::truncated:
{
- typename traits::image_type& i (statements_.image ());
+ typename traits::image_type& im (statements_.image ());
+ traits::grow (im, statements_.image_error ());
- if (traits::grow (i, statements_.image_error ()))
+ if (im.version != statements_.image_version ())
{
binding& b (statements_.image_binding ());
- traits::bind (b.bind, i);
+ traits::bind (b.bind, im);
+ statements_.image_version (im.version);
b.version++;
statement_->refetch ();
}