projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dropped use of casefiles
[pspp-builds.git]
/
src
/
language
/
stats
/
aggregate.c
diff --git
a/src/language/stats/aggregate.c
b/src/language/stats/aggregate.c
index 793a7256f2ee792e9cf04e81075a8bc17aa9f7f4..78c29c4fa74c125d19611b352733d683d95b4ed6 100644
(file)
--- a/
src/language/stats/aggregate.c
+++ b/
src/language/stats/aggregate.c
@@
-18,30
+18,44
@@
02110-1301, USA. */
#include <config.h>
02110-1301, USA. */
#include <config.h>
-#include <libpspp/message.h>
+
#include <stdlib.h>
#include <stdlib.h>
-#include <libpspp/alloc.h>
+
#include <data/any-writer.h>
#include <data/any-writer.h>
+#include <data/case-sink.h>
#include <data/case.h>
#include <data/casefile.h>
#include <data/case.h>
#include <data/casefile.h>
-#include <language/command.h>
#include <data/dictionary.h>
#include <data/dictionary.h>
-#include <libpspp/message.h>
#include <data/file-handle-def.h>
#include <data/file-handle-def.h>
+#include <data/procedure.h>
+#include <data/settings.h>
+#include <data/storage-stream.h>
+#include <data/sys-file-writer.h>
+#include <data/variable.h>
+#include <language/command.h>
+#include <language/data-io/file-handle.h>
#include <language/lexer/lexer.h>
#include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <language/stats/sort-criteria.h>
+#include <libpspp/alloc.h>
+#include <libpspp/message.h>
+#include <libpspp/message.h>
#include <libpspp/misc.h>
#include <libpspp/misc.h>
-#include <math/moments.h>
#include <libpspp/pool.h>
#include <libpspp/pool.h>
-#include <data/settings.h>
-#include <data/sys-file-writer.h>
-#include <math/sort.h>
#include <libpspp/str.h>
#include <libpspp/str.h>
-#include <
data/variable
.h>
-#include <
procedure
.h>
+#include <
math/moments
.h>
+#include <
math/sort
.h>
#include "gettext.h"
#define _(msgid) gettext (msgid)
#include "gettext.h"
#define _(msgid) gettext (msgid)
+/* Argument for AGGREGATE function. */
+union agr_argument
+ {
+ double f; /* Numeric. */
+ char *c; /* Short or long string. */
+ };
+
/* Specifies how to make an aggregate variable. */
struct agr_var
{
/* Specifies how to make an aggregate variable. */
struct agr_var
{
@@
-52,7
+66,7
@@
struct agr_var
struct variable *dest; /* Target variable. */
int function; /* Function. */
int include_missing; /* 1=Include user-missing values. */
struct variable *dest; /* Target variable. */
int function; /* Function. */
int include_missing; /* 1=Include user-missing values. */
- union
value arg[2];
/* Arguments. */
+ union
agr_argument arg[2];
/* Arguments. */
/* Accumulated during AGGREGATE execution. */
double dbl[3];
/* Accumulated during AGGREGATE execution. */
double dbl[3];
@@
-148,10
+162,10
@@
static int aggregate_single_case (struct agr_proc *agr,
static void dump_aggregate_info (struct agr_proc *agr, struct ccase *output);
/* Aggregating to the active file. */
static void dump_aggregate_info (struct agr_proc *agr, struct ccase *output);
/* Aggregating to the active file. */
-static bool agr_to_active_file (struct ccase *, void *aux);
+static bool agr_to_active_file (
const
struct ccase *, void *aux);
/* Aggregating to a system file. */
/* Aggregating to a system file. */
-static bool presorted_agr_to_sysfile (struct ccase *, void *aux);
+static bool presorted_agr_to_sysfile (
const
struct ccase *, void *aux);
\f
/* Parsing. */
\f
/* Parsing. */
@@
-254,7
+268,7
@@
cmd_aggregate (void)
{
/* The active file will be replaced by the aggregated data,
so TEMPORARY is moot. */
{
/* The active file will be replaced by the aggregated data,
so TEMPORARY is moot. */
-
cancel_temporary
();
+
proc_cancel_temporary_transformations
();
if (agr.sort != NULL && !presorted)
{
if (agr.sort != NULL && !presorted)
{
@@
-265,7
+279,7
@@
cmd_aggregate (void)
agr.sink = create_case_sink (&storage_sink_class, agr.dict, NULL);
if (agr.sink->class->open != NULL)
agr.sink->class->open (agr.sink);
agr.sink = create_case_sink (&storage_sink_class, agr.dict, NULL);
if (agr.sink->class->open != NULL)
agr.sink->class->open (agr.sink);
-
vfm_sink = create_case_sink (&null_sink_class, default_dict, NULL
);
+
proc_set_sink (create_case_sink (&null_sink_class, default_dict, NULL)
);
if (!procedure (agr_to_active_file, &agr))
goto error;
if (agr.case_cnt > 0)
if (!procedure (agr_to_active_file, &agr))
goto error;
if (agr.case_cnt > 0)
@@
-274,10
+288,11
@@
cmd_aggregate (void)
if (!agr.sink->class->write (agr.sink, &agr.agr_case))
goto error;
}
if (!agr.sink->class->write (agr.sink, &agr.agr_case))
goto error;
}
+ discard_variables ();
dict_destroy (default_dict);
default_dict = agr.dict;
agr.dict = NULL;
dict_destroy (default_dict);
default_dict = agr.dict;
agr.dict = NULL;
-
vfm_source = agr.sink->class->make_source (agr.sink
);
+
proc_set_source (agr.sink->class->make_source (agr.sink)
);
free_case_sink (agr.sink);
}
else
free_case_sink (agr.sink);
}
else
@@
-353,7
+368,7
@@
parse_aggregate_functions (struct agr_proc *agr)
const struct agr_func *function;
int func_index;
const struct agr_func *function;
int func_index;
- union
value
arg[2];
+ union
agr_argument
arg[2];
struct variable **src;
size_t n_src;
struct variable **src;
size_t n_src;
@@
-390,7
+405,7
@@
parse_aggregate_functions (struct agr_proc *agr)
if (token == T_STRING)
{
ds_truncate (&tokstr, 255);
if (token == T_STRING)
{
ds_truncate (&tokstr, 255);
- dest_label[n_dest - 1] =
xstrdup (ds_c_str (&tokstr)
);
+ dest_label[n_dest - 1] =
ds_xstrdup (&tokstr
);
lex_get ();
}
}
lex_get ();
}
}
@@
-458,7
+473,7
@@
parse_aggregate_functions (struct agr_proc *agr)
lex_match (',');
if (token == T_STRING)
{
lex_match (',');
if (token == T_STRING)
{
- arg[i].c =
xstrdup (ds_c_str (&tokstr)
);
+ arg[i].c =
ds_xstrdup (&tokstr
);
type = ALPHA;
}
else if (lex_is_number ())
type = ALPHA;
}
else if (lex_is_number ())
@@
-509,7
+524,7
@@
parse_aggregate_functions (struct agr_proc *agr)
|| (src[0]->type == ALPHA
&& str_compare_rpad (arg[0].c, arg[1].c) > 0)))
{
|| (src[0]->type == ALPHA
&& str_compare_rpad (arg[0].c, arg[1].c) > 0)))
{
- union
value
t = arg[0];
+ union
agr_argument
t = arg[0];
arg[0] = arg[1];
arg[1] = t;
arg[0] = arg[1];
arg[1] = t;
@@
-589,7
+604,6
@@
parse_aggregate_functions (struct agr_proc *agr)
}
free (dest[i]);
}
free (dest[i]);
- destvar->init = 0;
if (dest_label[i])
{
destvar->label = dest_label[i];
if (dest_label[i])
{
destvar->label = dest_label[i];
@@
-1069,7
+1083,7
@@
initialize_aggregate_info (struct agr_proc *agr, const struct ccase *input)
are dropped.
Returns true if successful, false if an I/O error occurred. */
static bool
are dropped.
Returns true if successful, false if an I/O error occurred. */
static bool
-agr_to_active_file (struct ccase *c, void *agr_)
+agr_to_active_file (
const
struct ccase *c, void *agr_)
{
struct agr_proc *agr = agr_;
{
struct agr_proc *agr = agr_;
@@
-1082,7
+1096,7
@@
agr_to_active_file (struct ccase *c, void *agr_)
/* Aggregate the current case and output it if we passed a
breakpoint. */
static bool
/* Aggregate the current case and output it if we passed a
breakpoint. */
static bool
-presorted_agr_to_sysfile (struct ccase *c, void *agr_)
+presorted_agr_to_sysfile (
const
struct ccase *c, void *agr_)
{
struct agr_proc *agr = agr_;
{
struct agr_proc *agr = agr_;