Fix bug #15766 (/KEEP subcommand on SAVE doesn't fully support ALL)
[pspp-builds.git] / src / data / casefile.c
index 9e31d431ce39410b0953515e79d1de5b12be0311..7681a65f9d4e3e33b1c272760ed33ea0bc78e621 100644 (file)
           during the reading phase.  Each casereader has an
           independent position in the casefile.
 
-          Casereaders may only move forward.  They cannot move
-          backward to arbitrary records or seek randomly.
-          Cloning casereaders is possible, but it is not yet
-          implemented.
+          Ordinary casereaders may only move forward.  They
+          cannot move backward to arbitrary records or seek
+          randomly.  Cloning casereaders is possible, but it is
+          not yet implemented.
 
           Use casefile_get_reader() to create a casereader for
           use in phase 2.  This also transitions from phase 1 to
           a case from a casereader.  Use casereader_destroy() to
           discard a casereader when it is no longer needed.
 
+          "Random" casereaders, which support a seek operation,
+          may also be created.  These should not, generally, be
+          used for statistical procedures, because random access
+          is much slower than sequential access.  They are
+          intended for use by the GUI.
+
        3. Destruction.  This phase is optional.  The casefile is
           also read with casereaders in this phase, but the
           ability to create new casereaders is curtailed.
@@ -539,8 +545,14 @@ casefile_get_reader (const struct casefile *cf_)
 struct casereader *
 casefile_get_random_reader (const struct casefile *cf) 
 {
-  struct casereader *reader = casefile_get_reader (cf);
+  struct casefile  *mutable_casefile = (struct casefile*) cf;
+  struct casereader *reader;
+
+  enum { WRITE, READ } mode = cf->mode ;
+  reader = casefile_get_reader (cf);
   reader->random = true;
+  mutable_casefile->mode = mode;
+  
   return reader;
 }