it works!!
[pspp] / src / data / dataset.c
index 450383fb875df81a71807ae7326de0768214330b..aa68ae9cb6b6c32ac1484b5aeb7cc83da9d705c2 100644 (file)
@@ -347,6 +347,18 @@ dataset_steal_source (struct dataset *ds)
   return reader;
 }
 
+bool
+dataset_delete_vars (struct dataset *ds, struct variable **vars, size_t n)
+{
+  dict_delete_vars (ds->dict, vars, n);
+  ds->source = case_map_create_input_translator (
+    case_map_to_compact_dict (ds->dict, 0), ds->source);
+  dict_compact_values (ds->dict);
+  caseinit_clear (ds->caseinit);
+  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
+  return true;
+}
+
 /* Returns a number unique to DS.  It can be used to distinguish one dataset
    from any other within a given program run, even datasets that do not exist
    at the same time. */
@@ -450,12 +462,12 @@ proc_open_filtering (struct dataset *ds, bool filter)
   if (!ds->discard_output)
     {
       struct dictionary *pd = ds->permanent_dict;
-      size_t compacted_n_values = dict_count_values (pd, 1u << DC_SCRATCH);
+      size_t compacted_n_values = dict_count_values (pd, DC_SCRATCH);
       if (compacted_n_values < dict_get_next_value_idx (pd))
         {
           struct caseproto *compacted_proto;
-          compacted_proto = dict_get_compacted_proto (pd, 1u << DC_SCRATCH);
-          ds->compactor = case_map_to_compact_dict (pd, 1u << DC_SCRATCH);
+          compacted_proto = dict_get_compacted_proto (pd, DC_SCRATCH);
+          ds->compactor = case_map_to_compact_dict (pd, DC_SCRATCH);
           ds->sink = autopaging_writer_create (compacted_proto);
           caseproto_unref (compacted_proto);
         }
@@ -803,6 +815,12 @@ proc_pop_transformations (struct dataset *ds, struct trns_chain *chain)
   *chain = ds->stack[--ds->n_stack];
 }
 
+bool
+proc_has_transformations (const struct dataset *ds)
+{
+  return ds->permanent_trns_chain.n || ds->temporary_trns_chain.n;
+}
+
 static enum trns_result
 store_case_num (void *var_, struct ccase **cc, casenumber case_num)
 {