From 7c3e9f3ae4bb1a207fd2443456c3309e8b173ac8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 18 Nov 2010 14:02:45 +0200 Subject: Version image types --- odb/mysql/result.txx | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'odb/mysql/result.txx') 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 (); } -- cgit v1.1