Changeset: 4046430d77b3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4046430d77b3
Modified Files:
monetdb5/modules/mal/array.mx
sql/scripts/29_array.sql
sql/test/sciql/Tests/01_create_01.stable.out
sql/test/sciql/Tests/07_tiling_01.sql
sql/test/sciql/Tests/07_tiling_01.stable.out
sql/test/sciql/Tests/07_tiling_02.sql
sql/test/sciql/Tests/07_tiling_02.stable.out
sql/test/sciql/Tests/07_tiling_03.sql
sql/test/sciql/Tests/07_tiling_03.stable.out
sql/test/sciql/Tests/07_tiling_04.sql
sql/test/sciql/Tests/07_tiling_04.stable.out
Branch: sciql
Log Message:
added the COUNT function over the array tiles.
extended existing tests with count()
approved expected changes in the stable outputs
corrected stable outputs of 07_tiling_04.sql to reveal the problem in the
current code in handling the group by criterion "[*]". This shall be fixed for
the XLDB2012 demo...
diffs (truncated from 3567 to 300 lines):
diff --git a/monetdb5/modules/mal/array.mx b/monetdb5/modules/mal/array.mx
--- a/monetdb5/modules/mal/array.mx
+++ b/monetdb5/modules/mal/array.mx
@@ -97,6 +97,10 @@ pattern max(val:@1, any...):@1
address ARRAYtilesMax_@1
comment "Construct the maximum over all tiles";
+pattern cnt(val:@1, any...):lng
+address ARRAYtilesCnt_@1
+comment "Construct the count over all tiles";
+
module batarray;
# The BAT version of the AGGR functions over array tiles
@@ -119,6 +123,10 @@ comment "Construct the minimum over all
pattern max(val:bat[:oid,:@1], any...):bat[:oid,:@1]
address ARRAYtilesMax_@1
comment "Construct the maximum over all tiles";
+
+pattern cnt(val:bat[:oid,:@1], any...):bat[:oid,:lng]
+address ARRAYtilesCnt_@1
+comment "Construct the count over all tiles";
@
@mal
@:tilesAggrDecl(bte)@
@@ -160,6 +168,7 @@ array_export str ARRAYtilesSum_@1(Client
array_export str ARRAYtilesAvg_@1(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
array_export str ARRAYtilesMin_@1(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
array_export str ARRAYtilesMax_@1(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+array_export str ARRAYtilesCnt_@1(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
@h
@:array_defs(bte)@
@:array_defs(sht)@
@@ -357,7 +366,7 @@ ARRAYfiller(Client cntxt, MalBlkPtr mb,
@= tilesAggr
/*
- * array.[sum|avg] inputs:
+ * array.[sum|avg|cnt] inputs:
* (cell_val:BAT,
* dim_1:BAT,tile_member_offset_dim_1:BAT,size_dim_1, ...,
* dim_n:BAT,tile_member_offset_dim_n:BAT,size_dim_n)
@@ -516,6 +525,12 @@ ARRAYtiles@4_@1(Client cntxt, MalBlkPtr
@:tilesAggr(lng,lng,dbl,Avg,avg, (dbl)sum / (dbl)cnt )@
@:tilesAggr(flt,dbl,dbl,Avg,avg, (dbl)sum / (dbl)cnt )@
@:tilesAggr(dbl,dbl,dbl,Avg,avg, (dbl)sum / (dbl)cnt )@
+@:tilesAggr(bte,lng,lng,Cnt,cnt, (lng)cnt )@
+@:tilesAggr(sht,lng,lng,Cnt,cnt, (lng)cnt )@
+@:tilesAggr(int,lng,lng,Cnt,cnt, (lng)cnt )@
+@:tilesAggr(lng,lng,lng,Cnt,cnt, (lng)cnt )@
+@:tilesAggr(flt,dbl,lng,Cnt,cnt, (lng)cnt )@
+@:tilesAggr(dbl,dbl,lng,Cnt,cnt, (lng)cnt )@
@= tilesMinMax
/*
diff --git a/sql/scripts/29_array.sql b/sql/scripts/29_array.sql
--- a/sql/scripts/29_array.sql
+++ b/sql/scripts/29_array.sql
@@ -36,27 +36,19 @@ create function array_series1("start" bi
create function array_series1("start" real, step real, stop real,
N integer, M integer) returns table (dimval real) external name
"array".series;
create function array_series1("start" double, step double, stop double,
N integer, M integer) returns table (dimval double) external name
"array".series;
-create function array_filler(cnt bigint, val tinyint) returns table (id
bigint, cellval tinyint) external name "array".filler_;
-create function array_filler(cnt bigint, val smallint) returns table (id
bigint, cellval smallint) external name "array".filler_;
-create function array_filler(cnt bigint, val integer) returns table (id
bigint, cellval integer) external name "array".filler_;
-create function array_filler(cnt bigint, val bigint) returns table (id
bigint, cellval bigint) external name "array".filler_;
-create function array_filler(cnt bigint, val real) returns table (id
bigint, cellval real) external name "array".filler_;
-create function array_filler(cnt bigint, val double) returns table (id
bigint, cellval double) external name "array".filler_;
-create function array_filler(cnt bigint, val date) returns table (id
bigint, vals date) external name "array".filler_;
-create function array_filler(cnt bigint, val time) returns table (id
bigint, vals time) external name "array".filler_;
-create function array_filler(cnt bigint, val timestamp) returns table (id
bigint, vals timestamp) external name "array".filler_;
-create function array_filler(cnt bigint, val char(2048)) returns table (id
bigint, vals char(2048)) external name "array".filler_;
-create function array_filler(cnt bigint, val varchar(2048)) returns table (id
bigint, vals varchar(2048)) external name "array".filler_;
-create function array_filler(cnt bigint, val blob) returns table (id
bigint, vals blob) external name "array".filler_;
-create function array_filler(cnt bigint, val clob) returns table (id
bigint, vals clob) external name "array".filler_;
-
---create function array_avg(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (a double) external name
"array".avg;
---create function array_avg(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (a real) external name
"array".avg;
---create function array_avg(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (a double) external name
"array".avg;
-
---create function array_sum(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (s bigint) external name
"array".sum;
---create function array_sum(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (s double) external name
"array".sum;
---create function array_sum(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns table (s double) external name
"array".sum;
+create function array_filler(count bigint, val tinyint) returns table
(id bigint, cellval tinyint) external name "array".filler_;
+create function array_filler(count bigint, val smallint) returns table
(id bigint, cellval smallint) external name "array".filler_;
+create function array_filler(count bigint, val integer) returns table
(id bigint, cellval integer) external name "array".filler_;
+create function array_filler(count bigint, val bigint) returns table
(id bigint, cellval bigint) external name "array".filler_;
+create function array_filler(count bigint, val real) returns table
(id bigint, cellval real) external name "array".filler_;
+create function array_filler(count bigint, val double) returns table
(id bigint, cellval double) external name "array".filler_;
+create function array_filler(count bigint, val date) returns table
(id bigint, vals date) external name "array".filler_;
+create function array_filler(count bigint, val time) returns table
(id bigint, vals time) external name "array".filler_;
+create function array_filler(count bigint, val timestamp) returns table
(id bigint, vals timestamp) external name "array".filler_;
+create function array_filler(count bigint, val char(2048)) returns table
(id bigint, vals char(2048)) external name "array".filler_;
+create function array_filler(count bigint, val varchar(2048)) returns table
(id bigint, vals varchar(2048)) external name "array".filler_;
+create function array_filler(count bigint, val blob) returns table
(id bigint, vals blob) external name "array".filler_;
+create function array_filler(count bigint, val clob) returns table
(id bigint, vals clob) external name "array".filler_;
create function array_avg(val tinyint, dim1 int, offsets1 int, size1 int)
returns double external name "array".avg;
create function array_avg(val smallint, dim1 int, offsets1 int, size1 int)
returns double external name "array".avg;
@@ -86,6 +78,13 @@ create function array_max(val bigint,
create function array_max(val real, dim1 int, offsets1 int, size1 int)
returns real external name "array".max;
create function array_max(val double, dim1 int, offsets1 int, size1 int)
returns double external name "array".max;
+create function array_count(val tinyint, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+create function array_count(val smallint, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+create function array_count(val int, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+create function array_count(val bigint, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+create function array_count(val real, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+create function array_count(val double, dim1 int, offsets1 int, size1 int)
returns bigint external name "array".cnt;
+
create function array_avg(val tinyint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns double external name "array".avg;
create function array_avg(val smallint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns double external name "array".avg;
create function array_avg(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns double external name "array".avg;
@@ -114,6 +113,13 @@ create function array_max(val bigint,
create function array_max(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns real external name "array".max;
create function array_max(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns double external name "array".max;
+create function array_count(val tinyint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+create function array_count(val smallint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+create function array_count(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+create function array_count(val bigint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+create function array_count(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+create function array_count(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int) returns bigint external name "array".cnt;
+
create function array_avg(val tinyint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
double external name "array".avg;
create function array_avg(val smallint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
double external name "array".avg;
create function array_avg(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
double external name "array".avg;
@@ -142,3 +148,10 @@ create function array_max(val bigint,
create function array_max(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
real external name "array".max;
create function array_max(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
double external name "array".max;
+create function array_count(val tinyint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+create function array_count(val smallint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+create function array_count(val int, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+create function array_count(val bigint, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+create function array_count(val real, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+create function array_count(val double, dim1 int, offsets1 int, size1 int,
dim2 int, offsets2 int, size2 int, dim3 int, offsets3 int, size3 int) returns
bigint external name "array".cnt;
+
diff --git a/sql/test/sciql/Tests/01_create_01.stable.out
b/sql/test/sciql/Tests/01_create_01.stable.out
--- a/sql/test/sciql/Tests/01_create_01.stable.out
+++ b/sql/test/sciql/Tests/01_create_01.stable.out
@@ -66,9 +66,9 @@ Ready.
% id, name, schema_id, query, type, system, commit_action,
readonly, fixed_array, nr_dimensions # name
% int, varchar, int, varchar, smallint, boolean,
smallint, boolean, boolean, int # type
% 4, 4, 4, 0, 1, 5, 1, 5, 5, 1 #
length
-[ 6849, "ary", 2000, NULL, 7, false, 0, false, true,
2 ]
-[ 6854, "ary1", 2000, NULL, 7, false, 0, false, false,
2 ]
-[ 6860, "ary2", 2000, NULL, 7, false, 0, false, false,
3 ]
+[ 7029, "ary", 2000, NULL, 7, false, 0, false, true,
2 ]
+[ 7034, "ary1", 2000, NULL, 7, false, 0, false, false,
2 ]
+[ 7040, "ary2", 2000, NULL, 7, false, 0, false, false,
3 ]
#DROP ARRAY ary;
# 13:50:46 >
diff --git a/sql/test/sciql/Tests/07_tiling_01.sql
b/sql/test/sciql/Tests/07_tiling_01.sql
--- a/sql/test/sciql/Tests/07_tiling_01.sql
+++ b/sql/test/sciql/Tests/07_tiling_01.sql
@@ -3,6 +3,7 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
create array a (x int dimension[4], y int dimension[4], v smallint default 37);
@@ -10,6 +11,7 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
create array a (x int dimension[4], y int dimension[4], v integer default 37);
@@ -17,6 +19,7 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
create array a (x int dimension[4], y int dimension[4], v bigint default 37);
@@ -24,6 +27,7 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
create array a (x int dimension[4], y int dimension[4], v real default 37);
@@ -31,6 +35,7 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
create array a (x int dimension[4], y int dimension[4], v double default 37);
@@ -38,5 +43,6 @@ select x, y, avg(v) from a group by a[x
select x, y, sum(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, min(v) from a group by a[x-1:x+2][y-2:y+1];
select x, y, max(v) from a group by a[x-1:x+2][y-2:y+1];
+select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
drop array a;
diff --git a/sql/test/sciql/Tests/07_tiling_01.stable.out
b/sql/test/sciql/Tests/07_tiling_01.stable.out
--- a/sql/test/sciql/Tests/07_tiling_01.stable.out
+++ b/sql/test/sciql/Tests/07_tiling_01.stable.out
@@ -130,6 +130,27 @@ Ready.
[ 3, 1, 37 ]
[ 3, 2, 37 ]
[ 3, 3, 37 ]
+#select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
+% sys.a, sys.a, sys. # table_name
+% x, y, L1 # name
+% int, int, bigint # type
+% 1, 1, 1 # length
+[ 0, 0, 2 ]
+[ 0, 1, 4 ]
+[ 0, 2, 6 ]
+[ 0, 3, 6 ]
+[ 1, 0, 3 ]
+[ 1, 1, 6 ]
+[ 1, 2, 9 ]
+[ 1, 3, 9 ]
+[ 2, 0, 3 ]
+[ 2, 1, 6 ]
+[ 2, 2, 9 ]
+[ 2, 3, 9 ]
+[ 3, 0, 2 ]
+[ 3, 1, 4 ]
+[ 3, 2, 6 ]
+[ 3, 3, 6 ]
#drop array a;
#create array a (x int dimension[4], y int dimension[4], v smallint default
37);
#select x, y, avg(v) from a group by a[x-1:x+2][y-2:y+1];
@@ -216,6 +237,27 @@ Ready.
[ 3, 1, 37 ]
[ 3, 2, 37 ]
[ 3, 3, 37 ]
+#select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
+% sys.a, sys.a, sys. # table_name
+% x, y, L1 # name
+% int, int, bigint # type
+% 1, 1, 1 # length
+[ 0, 0, 2 ]
+[ 0, 1, 4 ]
+[ 0, 2, 6 ]
+[ 0, 3, 6 ]
+[ 1, 0, 3 ]
+[ 1, 1, 6 ]
+[ 1, 2, 9 ]
+[ 1, 3, 9 ]
+[ 2, 0, 3 ]
+[ 2, 1, 6 ]
+[ 2, 2, 9 ]
+[ 2, 3, 9 ]
+[ 3, 0, 2 ]
+[ 3, 1, 4 ]
+[ 3, 2, 6 ]
+[ 3, 3, 6 ]
#drop array a;
#create array a (x int dimension[4], y int dimension[4], v integer default 37);
#select x, y, avg(v) from a group by a[x-1:x+2][y-2:y+1];
@@ -302,6 +344,27 @@ Ready.
[ 3, 1, 37 ]
[ 3, 2, 37 ]
[ 3, 3, 37 ]
+#select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
+% sys.a, sys.a, sys. # table_name
+% x, y, L1 # name
+% int, int, bigint # type
+% 1, 1, 1 # length
+[ 0, 0, 2 ]
+[ 0, 1, 4 ]
+[ 0, 2, 6 ]
+[ 0, 3, 6 ]
+[ 1, 0, 3 ]
+[ 1, 1, 6 ]
+[ 1, 2, 9 ]
+[ 1, 3, 9 ]
+[ 2, 0, 3 ]
+[ 2, 1, 6 ]
+[ 2, 2, 9 ]
+[ 2, 3, 9 ]
+[ 3, 0, 2 ]
+[ 3, 1, 4 ]
+[ 3, 2, 6 ]
+[ 3, 3, 6 ]
#drop array a;
#create array a (x int dimension[4], y int dimension[4], v bigint default 37);
#select x, y, avg(v) from a group by a[x-1:x+2][y-2:y+1];
@@ -388,6 +451,27 @@ Ready.
[ 3, 1, 37 ]
[ 3, 2, 37 ]
[ 3, 3, 37 ]
+#select x, y,count(v) from a group by a[x-1:x+2][y-2:y+1];
+% sys.a, sys.a, sys. # table_name
+% x, y, L1 # name
+% int, int, bigint # type
+% 1, 1, 1 # length
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list