X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdataset.c;h=063a4a425184ff1c6c35c06717c1552d83177e58;hb=e0b27f6f4cde2d52508db337c76ea81a8ca8ee79;hp=a816570c0ed86f777dcac670dfe9560fd3abc78c;hpb=064e63444113026f99a518bf1ec77da5eb6b036b;p=pspp diff --git a/src/data/dataset.c b/src/data/dataset.c index a816570c0e..063a4a4251 100644 --- a/src/data/dataset.c +++ b/src/data/dataset.c @@ -354,6 +354,12 @@ dataset_delete_vars (struct dataset *ds, struct variable **vars, size_t n) assert (!proc_has_transformations (ds)); assert (n < dict_get_n_vars (ds->dict)); + caseinit_mark_for_init (ds->caseinit, ds->dict); + ds->source = caseinit_translate_casereader_to_init_vars ( + ds->caseinit, dict_get_proto (ds->dict), ds->source); + caseinit_clear (ds->caseinit); + caseinit_mark_as_preinited (ds->caseinit, ds->dict); + dict_delete_vars (ds->dict, vars, n); ds->source = case_map_create_input_translator ( case_map_to_compact_dict (ds->dict, 0), ds->source); @@ -448,6 +454,8 @@ proc_open_filtering (struct dataset *ds, bool filter) update_last_proc_invocation (ds); caseinit_mark_for_init (ds->caseinit, ds->dict); + ds->source = caseinit_translate_casereader_to_init_vars ( + ds->caseinit, dict_get_proto (ds->dict), ds->source); /* Finish up the collection of transformations. */ add_case_limit_trns (ds); @@ -466,7 +474,8 @@ proc_open_filtering (struct dataset *ds, bool filter) { struct dictionary *pd = ds->permanent_dict; size_t compacted_n_values = dict_count_values (pd, DC_SCRATCH); - if (compacted_n_values < dict_get_next_value_idx (pd)) + assert (dict_count_values (pd, 0) == dict_get_n_vars (pd)); + if (compacted_n_values < dict_get_n_vars (pd)) { struct caseproto *compacted_proto; compacted_proto = dict_get_compacted_proto (pd, DC_SCRATCH); @@ -549,12 +558,12 @@ proc_casereader_read (struct casereader *reader UNUSED, void *ds_) if (c == NULL) return NULL; c = case_unshare_and_resize (c, dict_get_proto (ds->dict)); - caseinit_init_vars (ds->caseinit, c); + caseinit_restore_left_vars (ds->caseinit, c); /* Execute permanent transformations. */ casenumber case_nr = ds->cases_written + 1; retval = trns_chain_execute (&ds->permanent_trns_chain, case_nr, &c); - caseinit_update_left_vars (ds->caseinit, c); + caseinit_save_left_vars (ds->caseinit, c); if (retval != TRNS_CONTINUE) continue;