X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Faggregate.c;h=42f330d5d21a64b141a963b82ce1bbcae49a7c3e;hb=f550aee00a62fe1d8baf62d83cd7efef6cc2ee92;hp=891e0ccaa3cb8f7c4bb4ba0da73feb1d456a1843;hpb=cb586666724d5fcbdb658ce471b85484f0a7babe;p=pspp diff --git a/src/language/stats/aggregate.c b/src/language/stats/aggregate.c index 891e0ccaa3..42f330d5d2 100644 --- a/src/language/stats/aggregate.c +++ b/src/language/stats/aggregate.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -196,6 +196,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) dict_set_documents (agr.dict, dict_get_documents (dict)); /* OUTFILE subcommand must be first. */ + lex_match (lexer, '/'); if (!lex_force_match_id (lexer, "OUTFILE")) goto error; lex_match (lexer, '='); @@ -236,8 +237,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) agr.break_var_cnt = subcase_get_n_fields (&agr.sort); for (i = 0; i < agr.break_var_cnt; i++) - dict_clone_var_assert (agr.dict, agr.break_vars[i], - var_get_name (agr.break_vars[i])); + dict_clone_var_assert (agr.dict, agr.break_vars[i]); /* BREAK must follow the options. */ break; @@ -391,7 +391,8 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, size_t n_dest_prev = n_dest; if (!parse_DATA_LIST_vars (lexer, &dest, &n_dest, - PV_APPEND | PV_SINGLE | PV_NO_SCRATCH)) + (PV_APPEND | PV_SINGLE | PV_NO_SCRATCH + | PV_NO_DUPLICATE))) goto error; /* Assign empty labels. */ @@ -581,7 +582,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, } if (function->alpha_type == VAL_STRING) - destvar = dict_clone_var (agr->dict, v->src, dest[i]); + destvar = dict_clone_var_as (agr->dict, v->src, dest[i]); else { assert (var_is_numeric (v->src) @@ -711,8 +712,8 @@ agr_destroy (struct agr_proc *agr) else if (iter->function == SD) moments1_destroy (iter->moments); - var_destroy (iter->subject); - var_destroy (iter->weight); + dict_destroy_internal_var (iter->subject); + dict_destroy_internal_var (iter->weight); free (iter); } @@ -1105,10 +1106,10 @@ initialize_aggregate_info (struct agr_proc *agr, const struct ccase *input) proto = caseproto_add_width (proto, 0); if ( ! iter->subject) - iter->subject = var_create_internal (0, 0); + iter->subject = dict_create_internal_var (0, 0); if ( ! iter->weight) - iter->weight = var_create_internal (1, 0); + iter->weight = dict_create_internal_var (1, 0); subcase_init_var (&ordering, iter->subject, SC_ASCEND); iter->writer = sort_create_writer (&ordering, proto);