projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update the recommended gnulib commit, since it contains an important w32 fix
[pspp]
/
src
/
language
/
stats
/
aggregate.c
diff --git
a/src/language/stats/aggregate.c
b/src/language/stats/aggregate.c
index 319e19a3e83bf9931ddf864ede45b0a29f1417eb..fed765692f9a65cc30d20c3b1d17ff2bef81843b 100644
(file)
--- a/
src/language/stats/aggregate.c
+++ b/
src/language/stats/aggregate.c
@@
-25,10
+25,10
@@
#include "data/casegrouper.h"
#include "data/casereader.h"
#include "data/casewriter.h"
#include "data/casegrouper.h"
#include "data/casereader.h"
#include "data/casewriter.h"
+#include "data/dataset.h"
#include "data/dictionary.h"
#include "data/file-handle-def.h"
#include "data/format.h"
#include "data/dictionary.h"
#include "data/file-handle-def.h"
#include "data/format.h"
-#include "data/procedure.h"
#include "data/settings.h"
#include "data/subcase.h"
#include "data/sys-file-writer.h"
#include "data/settings.h"
#include "data/subcase.h"
#include "data/sys-file-writer.h"
@@
-39,14
+39,15
@@
#include "language/lexer/variable-parser.h"
#include "language/stats/sort-criteria.h"
#include "libpspp/assertion.h"
#include "language/lexer/variable-parser.h"
#include "language/stats/sort-criteria.h"
#include "libpspp/assertion.h"
+#include "libpspp/i18n.h"
#include "libpspp/message.h"
#include "libpspp/misc.h"
#include "libpspp/pool.h"
#include "libpspp/str.h"
#include "math/moments.h"
#include "libpspp/message.h"
#include "libpspp/misc.h"
#include "libpspp/pool.h"
#include "libpspp/str.h"
#include "math/moments.h"
+#include "math/percentiles.h"
#include "math/sort.h"
#include "math/statistic.h"
#include "math/sort.h"
#include "math/statistic.h"
-#include "math/percentiles.h"
#include "gl/minmax.h"
#include "gl/xalloc.h"
#include "gl/minmax.h"
#include "gl/xalloc.h"
@@
-181,7
+182,7
@@
cmd_aggregate (struct lexer *lexer, struct dataset *ds)
lex_match (lexer, T_EQUALS);
if (!lex_match (lexer, T_ASTERISK))
{
lex_match (lexer, T_EQUALS);
if (!lex_match (lexer, T_ASTERISK))
{
- out_file = fh_parse (lexer, FH_REF_FILE
| FH_REF_SCRATCH
);
+ out_file = fh_parse (lexer, FH_REF_FILE
, dataset_session (ds)
);
if (out_file == NULL)
goto error;
}
if (out_file == NULL)
goto error;
}
@@
-207,7
+208,7
@@
cmd_aggregate (struct lexer *lexer, struct dataset *ds)
if ( agr.add_variables )
agr.dict = dict_clone (dict);
else
if ( agr.add_variables )
agr.dict = dict_clone (dict);
else
- agr.dict = dict_create (
);
+ agr.dict = dict_create (
dict_get_encoding (dict));
dict_set_label (agr.dict, dict_get_label (dict));
dict_set_documents (agr.dict, dict_get_documents (dict));
dict_set_label (agr.dict, dict_get_label (dict));
dict_set_documents (agr.dict, dict_get_documents (dict));
@@
-274,7
+275,7
@@
cmd_aggregate (struct lexer *lexer, struct dataset *ds)
if (out_file == NULL)
{
if (out_file == NULL)
{
- /* The active
file
will be replaced by the aggregated data,
+ /* The active
dataset
will be replaced by the aggregated data,
so TEMPORARY is moot. */
proc_cancel_temporary_transformations (ds);
proc_discard_output (ds);
so TEMPORARY is moot. */
proc_cancel_temporary_transformations (ds);
proc_discard_output (ds);
@@
-350,7
+351,8
@@
cmd_aggregate (struct lexer *lexer, struct dataset *ds)
if (next_input == NULL)
goto error;
if (next_input == NULL)
goto error;
- proc_set_active_file (ds, next_input, agr.dict);
+ dataset_set_dict (ds, agr.dict);
+ dataset_set_source (ds, next_input);
agr.dict = NULL;
}
else
agr.dict = NULL;
}
else
@@
-416,7
+418,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
{
size_t n_dest_prev = n_dest;
{
size_t n_dest_prev = n_dest;
- if (!parse_DATA_LIST_vars (lexer, &dest, &n_dest,
+ if (!parse_DATA_LIST_vars (lexer,
dict,
&dest, &n_dest,
(PV_APPEND | PV_SINGLE | PV_NO_SCRATCH
| PV_NO_DUPLICATE)))
goto error;
(PV_APPEND | PV_SINGLE | PV_NO_SCRATCH
| PV_NO_DUPLICATE)))
goto error;
@@
-434,14
+436,8
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
if (lex_is_string (lexer))
{
if (lex_is_string (lexer))
{
- /* XXX check re-encoded length */
- struct string label;
- ds_init_substring (&label, lex_tokss (lexer));
-
- ds_truncate (&label, 255);
- dest_label[n_dest - 1] = ds_xstrdup (&label);
+ dest_label[n_dest - 1] = xstrdup (lex_tokcstr (lexer));
lex_get (lexer);
lex_get (lexer);
- ds_destroy (&label);
}
}
}
}
@@
-453,7
+449,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
}
ds_assign_substring (&function_name, lex_tokss (lexer));
}
ds_assign_substring (&function_name, lex_tokss (lexer));
- exclude = ds_chomp (&function_name, '.') ? MV_SYSTEM : MV_ANY;
+ exclude = ds_chomp
_byte
(&function_name, '.') ? MV_SYSTEM : MV_ANY;
for (function = agr_func_tab; function->name; function++)
if (!strcasecmp (function->name, ds_cstr (&function_name)))
for (function = agr_func_tab; function->name; function++)
if (!strcasecmp (function->name, ds_cstr (&function_name)))
@@
-502,7
+498,9
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
lex_match (lexer, T_COMMA);
if (lex_is_string (lexer))
{
lex_match (lexer, T_COMMA);
if (lex_is_string (lexer))
{
- arg[i].c = ss_xstrdup (lex_tokss (lexer));
+ arg[i].c = recode_string (dict_get_encoding (agr->dict),
+ "UTF-8", lex_tokcstr (lexer),
+ -1);
type = VAL_STRING;
}
else if (lex_is_number (lexer))
type = VAL_STRING;
}
else if (lex_is_number (lexer))
@@
-640,7
+638,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
free (dest[i]);
if (dest_label[i])
free (dest[i]);
if (dest_label[i])
- var_set_label (destvar, dest_label[i]);
+ var_set_label (destvar, dest_label[i]
, true
);
v->dest = destvar;
}
v->dest = destvar;
}
@@
-811,6
+809,7
@@
accumulate_aggregate_info (struct agr_proc *agr, const struct ccase *input)
iter->int1 = 1;
break;
case MAX | FSTRING:
iter->int1 = 1;
break;
case MAX | FSTRING:
+ /* Need to do some kind of Unicode collation thingy here */
if (memcmp (iter->string, value_str (v, src_width), src_width) < 0)
memcpy (iter->string, value_str (v, src_width), src_width);
iter->int1 = 1;
if (memcmp (iter->string, value_str (v, src_width), src_width) < 0)
memcpy (iter->string, value_str (v, src_width), src_width);
iter->int1 = 1;