Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
436d0443
Commit
436d0443
authored
Jul 17, 2000
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Stat functions now in main system, contrib code no longer needed.
parent
d06ebdb8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
474 deletions
+0
-474
contrib/statmath/Makefile
contrib/statmath/Makefile
+0
-38
contrib/statmath/README.statmath
contrib/statmath/README.statmath
+0
-39
contrib/statmath/statmath.c
contrib/statmath/statmath.c
+0
-309
contrib/statmath/statmath.sql.in
contrib/statmath/statmath.sql.in
+0
-88
No files found.
contrib/statmath/Makefile
deleted
100644 → 0
View file @
d06ebdb8
#
# $Header: /cvsroot/pgsql/contrib/statmath/Attic/Makefile,v 1.2 2000/07/09 13:13:41 petere Exp $
#
subdir
=
contrib/statmath
top_builddir
=
../..
include
../../src/Makefile.global
NAME
:=
statmath
SONAME
:=
$(NAME)$(DLSUFFIX)
CFLAGS
+=
-I
.
$(CFLAGS_SL)
all
:
$(SONAME) $(NAME).sql
$(NAME).sql
:
$(NAME).sql.in
sed
-e
's:MODULE_PATHNAME:
$(libdir)
/contrib/
$(SONAME)
:g'
<
$<
>
$@
install
:
all installdirs
$(INSTALL_SHLIB)
$(SONAME)
$(libdir)
/contrib
$(INSTALL_DATA)
$(NAME)
.sql
$(datadir)
/contrib
$(INSTALL_DATA)
README.
$(NAME)
$(docdir)
/contrib
installdirs
:
$(mkinstalldirs)
$(libdir)
/contrib
$(datadir)
/contrib
$(docdir)
/contrib
uninstall
:
rm
-f
$(libdir)
/contrib/
$(SONAME)
$(datadir)
/contrib/
$(NAME)
.sql
$(docdir)
/contrib/README.
$(NAME)
clean
:
rm
-f
$(SONAME)
$(NAME)
.sql
depend dep
:
$(CC)
-MM
-MG
$(CFLAGS)
*
.c
>
depend
ifeq
(depend,$(wildcard depend))
include
depend
endif
contrib/statmath/README.statmath
deleted
100644 → 0
View file @
d06ebdb8
Statistical aggregate functions for PostgreSQL.
This module provides some aggregate functions for statistical
mathematics. A new datatype holding two double precision
floating point values is required by them.
The aggregates are:
average(float8) average value computed by
n
___
_ 1 \
x = --- > x
n /__ i
i=1
variance(float8 variance computed by
n
___
2 1 \ _ 2
s = --- > (x - x)
n-1 /__ i
i=1
stddev(float8) standard deviation computed by
_____
/ 2
s = / s
\/
--
Jan Wieck <JanWieck@Yahoo.com>
contrib/statmath/statmath.c
deleted
100644 → 0
View file @
d06ebdb8
/* ----------
* Module statmath
*
* statistical aggregates for average, variance and standard
* deviation.
*
* $Header: /cvsroot/pgsql/contrib/statmath/Attic/statmath.c,v 1.2 2000/07/04 14:37:32 wieck Exp $
*
* Jan Wieck
* ----------
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
#include "postgres.h"
#include "utils/palloc.h"
/* ----------
* Declarations
*
* statmath_stateval_in() Input function for state transition variable
* statmath_stateval_out() Output function for state transition variable
* statmath_collect() State transition function to collect items
* statmath_average_fin() Final function for average aggregate
* statmath_variance_fin() Final function for variance aggregate
* statmath_stddev_fin() Final function for deviation aggregate
* ----------
*/
float64
statmath_stateval_in
(
char
*
str
);
char
*
statmath_stateval_out
(
float64
sval
);
float64
statmath_collect
(
float64
sval
,
float64
item
);
float64
statmath_average_fin
(
float64
sval
,
int4
n
);
float64
statmath_variance_fin
(
float64
sval
,
int4
n
);
float64
statmath_stddev_fin
(
float64
sval
,
int4
n
);
/* ----------
* statmath_checkval -
*
* Bounds checking for float8 values in Postgres
* ----------
*/
static
void
statmath_checkval
(
double
val
)
{
if
(
fabs
(
val
)
>
DBL_MAX
)
elog
(
ERROR
,
"statmath: overflow"
);
if
(
val
!=
0
.
0
&&
fabs
(
val
)
<
DBL_MIN
)
elog
(
ERROR
,
"statmath: underflow"
);
}
/* ----------
* statmath_stateval_in -
*
* Input function for the state transition value data type.
* The input string are two float8's separated with a colon ':'.
* ----------
*/
float64
statmath_stateval_in
(
char
*
str
)
{
float64
retval
;
double
tmp
;
char
*
cp1
,
*
cp2
;
if
(
!
str
)
return
(
float64
)
NULL
;
/*
* Allocate space for the result
*/
retval
=
(
float64
)
palloc
(
sizeof
(
float64data
)
*
2
);
/*
* Get the first number
*/
errno
=
0
;
tmp
=
strtod
(
str
,
&
cp1
);
if
(
*
cp1
!=
':'
||
errno
==
ERANGE
)
elog
(
ERROR
,
"statmath: illegal input format '%s'"
,
str
);
statmath_checkval
(
tmp
);
retval
[
0
]
=
tmp
;
/*
* Get the second number
*/
tmp
=
strtod
(
++
cp1
,
&
cp2
);
if
(
*
cp2
!=
'\0'
||
errno
==
ERANGE
)
elog
(
ERROR
,
"statmath: illegal input format '%s'"
,
str
);
statmath_checkval
(
tmp
);
retval
[
1
]
=
tmp
;
/*
* Return the internal binary format
*/
return
retval
;
}
/* ----------
* statmath_stateval_out -
*
* Output function for the state transition value data type.
* ----------
*/
char
*
statmath_stateval_out
(
float64
sval
)
{
char
buf
[
1024
];
double
v1
,
v2
;
if
(
!
sval
)
return
pstrdup
(
"(null)"
);
/*
* Print the values in the external format and return
* the result in allocated space
*/
v1
=
sval
[
0
];
v2
=
sval
[
1
];
sprintf
(
buf
,
"%.*g:%.*g"
,
DBL_DIG
,
v1
,
DBL_DIG
,
v2
);
return
pstrdup
(
buf
);
}
/* ----------
* statmath_collect -
*
* State transition function to collect data for the variance
* and standard deviation aggregates.
* The state transition variable holds 2 float8 values. The
* first is the sum of the items, the second the sum of the
* item quadratic products.
* ----------
*/
float64
statmath_collect
(
float64
sval
,
float64
item
)
{
float64
retval
;
double
tmp
;
if
(
!
sval
||
!
item
)
return
(
float64
)
NULL
;
/*
* Allocate space for the result
*/
retval
=
(
float64
)
palloc
(
sizeof
(
float64data
)
*
2
);
/*
* Compute the new values
*/
tmp
=
sval
[
0
]
+
*
item
;
statmath_checkval
(
tmp
);
retval
[
0
]
=
tmp
;
tmp
=
sval
[
1
]
+
*
item
*
*
item
;
statmath_checkval
(
tmp
);
retval
[
1
]
=
tmp
;
/*
* Return the result
*/
return
retval
;
}
/* ----------
* statmath_average_fin -
*
* Final computation function for the average aggregate.
* ----------
*/
float64
statmath_average_fin
(
float64
sum
,
int4
n
)
{
float64
retval
;
double
tmp
;
if
(
!
sum
)
return
(
float64
)
NULL
;
/*
* Allocate space for the result
*/
retval
=
(
float64
)
palloc
(
sizeof
(
float64data
));
/*
* Avoid division by zero if no items collected
*/
if
(
n
==
0
)
{
*
retval
=
0
.
0
;
return
retval
;
}
/*
* Compute the average
*/
tmp
=
*
sum
/
(
double
)
n
;
statmath_checkval
(
tmp
);
*
retval
=
tmp
;
/*
* Return the result
*/
return
retval
;
}
/* ----------
* statmath_variance_fin -
*
* Final computation function for the variance aggregate
* ----------
*/
float64
statmath_variance_fin
(
float64
sval
,
int4
n
)
{
float64
retval
;
double
avg
;
double
variance
;
if
(
!
sval
)
return
(
float64
)
NULL
;
/*
* Allocate space for the result
*/
retval
=
(
float64
)
palloc
(
sizeof
(
float64data
));
/*
* Avoid division by zero if less than 2 items collected
*/
if
(
n
<
2
)
{
*
retval
=
0
.
0
;
return
retval
;
}
/*
* Calculate the variance
*/
avg
=
sval
[
0
]
/
(
double
)
n
;
variance
=
(
sval
[
1
]
-
sval
[
0
]
*
avg
)
/
((
double
)
n
-
1
.
0
);
statmath_checkval
(
variance
);
*
retval
=
variance
;
/*
* Return the result
*/
return
retval
;
}
/* ----------
* statmath_stateval_in -
*
* Input function for the state transition value data type
* ----------
*/
float64
statmath_stddev_fin
(
float64
sval
,
int4
n
)
{
float64
retval
;
double
avg
;
double
stddev
;
if
(
!
sval
)
return
(
float64
)
NULL
;
/*
* Allocate space for the result
*/
retval
=
(
float64
)
palloc
(
sizeof
(
float64data
));
/*
* Avoid division by zero if less than 2 items collected
*/
if
(
n
<
2
)
{
*
retval
=
0
.
0
;
return
retval
;
}
/*
* Calculate the standard deviation
*/
avg
=
sval
[
0
]
/
(
double
)
n
;
stddev
=
sqrt
((
sval
[
1
]
-
sval
[
0
]
*
avg
)
/
((
double
)
n
-
1
.
0
));
statmath_checkval
(
stddev
);
*
retval
=
stddev
;
/*
* Return the result
*/
return
retval
;
}
contrib/statmath/statmath.sql.in
deleted
100644 → 0
View file @
d06ebdb8
-- statmath.sql
--
-- Install the statistical aggregates
--
--
-- Create the new data type for the state transition variable
--
CREATE FUNCTION statmath_stateval_in(opaque)
RETURNS statmath_stateval
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
CREATE FUNCTION statmath_stateval_out(opaque)
RETURNS opaque
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
CREATE TYPE statmath_stateval (
internallength = 16,
input = statmath_stateval_in,
output = statmath_stateval_out,
alignment = double
);
--
-- Create the statistic data collector used in the aggregates
--
CREATE FUNCTION statmath_collect(statmath_stateval, float8)
RETURNS statmath_stateval
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
--
-- Create the final functions for the three aggregates
--
CREATE FUNCTION statmath_average_fin(float8, int4)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
CREATE FUNCTION statmath_variance_fin(statmath_stateval, int4)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
CREATE FUNCTION statmath_stddev_fin(statmath_stateval, int4)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE 'C';
--
-- Create the aggregates themself
--
CREATE AGGREGATE average (
basetype = float8,
stype1 = float8,
stype2 = int4,
sfunc1 = float8pl,
sfunc2 = int4inc,
finalfunc = statmath_average_fin,
initcond1 = '0',
initcond2 = '0'
);
CREATE AGGREGATE variance (
basetype = float8,
stype1 = statmath_stateval,
stype2 = int4,
sfunc1 = statmath_collect,
sfunc2 = int4inc,
finalfunc = statmath_variance_fin,
initcond1 = '0:0',
initcond2 = '0'
);
CREATE AGGREGATE stddev (
basetype = float8,
stype1 = statmath_stateval,
stype2 = int4,
sfunc1 = statmath_collect,
sfunc2 = int4inc,
finalfunc = statmath_stddev_fin,
initcond1 = '0:0',
initcond2 = '0'
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment