Changeset: 461f5af94689 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=461f5af94689
Added Files:
tools/sql/Makefile.ag
Modified Files:
monetdb5/mal/mal_linker.c
sql/backends/monet5/Makefile.ag
sql/backends/monet5/sql_embedded.c
sql/backends/monet5/sql_rank.mal
sql/backends/monet5/sql_rank.mal.h
sql/backends/monet5/sql_rank_hge.mal
sql/backends/monet5/sql_rank_hge.mal.h
tools/Makefile.ag
tools/mserver/Makefile.ag
vertoo.config
Branch: translate-scripts
Log Message:
Create new library "libsql", to be used by mserver executable to start the SQL
environment.
diffs (195 lines):
diff --git a/monetdb5/mal/mal_linker.c b/monetdb5/mal/mal_linker.c
--- a/monetdb5/mal/mal_linker.c
+++ b/monetdb5/mal/mal_linker.c
@@ -103,17 +103,17 @@ getAddress(str fcnname)
*
* the first argument must be the same as the base name of the
* library that is created in src/tools */
- dl = mdlopen("libmonetdb5", RTLD_NOW | RTLD_GLOBAL);
+ dl = mdlopen("libsql", RTLD_NOW | RTLD_GLOBAL);
if (dl == NULL)
return NULL;
adr = (MALfcn) dlsym(dl, fcnname);
- filesLoaded[lastfile].modname = GDKstrdup("libmonetdb5");
+ filesLoaded[lastfile].modname = GDKstrdup("libsql");
if(filesLoaded[lastfile].modname == NULL) {
dlclose(dl);
return NULL;
}
- filesLoaded[lastfile].fullname = GDKstrdup("libmonetdb5");
+ filesLoaded[lastfile].fullname = GDKstrdup("libsql");
if(filesLoaded[lastfile].fullname == NULL) {
dlclose(dl);
GDKfree(filesLoaded[lastfile].modname);
diff --git a/sql/backends/monet5/Makefile.ag b/sql/backends/monet5/Makefile.ag
--- a/sql/backends/monet5/Makefile.ag
+++ b/sql/backends/monet5/Makefile.ag
@@ -19,15 +19,9 @@ INCLUDES = ../../include ../../common ..
../../../common/utils \
../../../gdk
-lib_sqlstart = {
+lib_sqlcatalog = {
NOINST
DIR = libdir/monetdb5
- SOURCES = sql_embedded.c sql_embedded.h
-}
-
-lib__sql = {
- MODULE
- DIR = libdir/monetdb5
SOURCES = \
sql.c sql.h \
mal_backend.c mal_backend.h \
@@ -52,19 +46,8 @@ lib__sql = {
sql_fround.c sql_fround_impl.h \
sql_orderidx.c sql_orderidx.h \
wlr.c wlr.h \
- sql_rank.c sql_rank.h
-
- # libmapi on Windows for mcrypt_*
- LIBS = ../../server/libsqlserver \
- ../../scripts/libsqlscripts \
- ../../storage/libstore \
- ../../storage/bat/libbatstore \
- ../../common/libsqlcommon \
- WIN32?../../../clients/mapilib/libmapi \
- WIN32?../../../monetdb5/tools/libmonetdb5 \
- WIN32?../../../gdk/libbat \
- WIN32?../../../common/stream/libstream \
- WIN32?$(openssl_LIBS)
+ sql_rank.c sql_rank.h \
+ sql_embedded.c sql_embedded.h
}
EXTRA_DIST_DIR = Tests
diff --git a/sql/backends/monet5/sql_embedded.c
b/sql/backends/monet5/sql_embedded.c
--- a/sql/backends/monet5/sql_embedded.c
+++ b/sql/backends/monet5/sql_embedded.c
@@ -27,11 +27,11 @@ static struct mal_sql_scripts {
#include "sql_aggr_flt.mal.h"
#include "sql_aggr_dbl.mal.h"
#include "sql_inspect.mal.h"
+#include "sql.mal.h"
#include "sqlcatalog.mal.h"
#include "sql_transaction.mal.h"
#include "wlr.mal.h"
#include "40_sql.mal.h"
-#include "sql.mal.h"
#ifdef HAVE_HGE
#include "sql_decimal_hge.mal.h"
diff --git a/sql/backends/monet5/sql_rank.mal b/sql/backends/monet5/sql_rank.mal
--- a/sql/backends/monet5/sql_rank.mal
+++ b/sql/backends/monet5/sql_rank.mal
@@ -6,6 +6,8 @@
# This file was generated by using the script sql_rank.mal.sh.
+module aggr;
+module batsql;
module sql;
pattern sql.diff(b:any_1) :bit
diff --git a/sql/backends/monet5/sql_rank.mal.h
b/sql/backends/monet5/sql_rank.mal.h
--- a/sql/backends/monet5/sql_rank.mal.h
+++ b/sql/backends/monet5/sql_rank.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "sql_rank", "\n\nmodule sql;\n\npattern sql.diff(b:any_1) :bit\naddress
SQLdiff\ncomment \"return true if cur != prev row\";\n\npattern
batsql.diff(b:bat[:any_1]) :bat[:bit]\naddress SQLdiff\ncomment \"return true
if cur != prev row\";\n\npattern sql.diff(p:bit, b:any_1) :bit\naddress
SQLdiff\ncomment \"return true if cur != prev row\";\n\npattern
batsql.diff(p:bat[:bit], b:bat[:any_1]) :bat[:bit]\naddress SQLdiff\ncomment
\"return true if cur != prev row\";\n\npattern sql.window_bound(b:any_1,
unit:int, bound:int, excl:int, limit:bte) :lng\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:bte)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, limit:bte) :lng\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:
bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int, limit:bte)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, limit:bat[:bte]) :bat[:lng]\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:bte]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.window_bound(b:any_1, unit:int,
bound:int, excl:int, limit:sht) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:sht)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, limit:sht) :lng\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:sht) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:sht]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:sht])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int,
limit:int) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, limit:int) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npattern sql.window_bound(p:bit, b:any_1,
unit:int, bound:int, excl:i
nt, limit:int) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges
for each row\";\n\npattern batsql.window_bound(p:bat[:bit], b:bat[:any_1],
unit:int, bound:int, excl:int, limit:int) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:int]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:int])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int,
limit:lng) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, limit:lng) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npatt
ern sql.window_bound(p:bit, b:any_1, unit:int, bound:int, excl:int, limit:lng)
:lng\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int,
bound:int, excl:int, limit:lng) :bat[:lng]\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:lng]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:lng])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int,
limit:flt) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, limit:flt) :bat[:lng]\naddress SQLwindow
_bound\ncomment \"computes window ranges for each row\";\n\npattern
sql.window_bound(p:bit, b:any_1, unit:int, bound:int, excl:int, limit:flt)
:lng\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int,
bound:int, excl:int, limit:flt) :bat[:lng]\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:flt]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:flt])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int,
limit:dbl) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:in
t, bound:int, excl:int, limit:dbl) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
sql.window_bound(p:bit, b:any_1, unit:int, bound:int, excl:int, limit:dbl)
:lng\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int,
bound:int, excl:int, limit:dbl) :bat[:lng]\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:dbl]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:dbl])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.row_number(b:any_1, p:bit, o:bit) :int\naddress
SQLrow_number\ncomment \"return the row_numer-ed groups\";\n\npattern
batsql.row_numb
er(b:bat[:any_1], p:any_2, o:any_3) :bat[:int]\naddress SQLrow_number\ncomment
\"return the row_numer-ed groups\";\n\n\npattern sql.rank(b:any_1, p:bit,
o:bit) :int\naddress SQLrank\ncomment \"return the ranked groups\";\n\npattern
batsql.rank(b:bat[:any_1], p:any_2, o:any_3) :bat[:int]\naddress
SQLrank\ncomment \"return the ranked groups\";\n\n\npattern
sql.dense_rank(b:any_1, p:bit, o:bit) :int\naddress SQLdense_rank\ncomment
\"return the densely ranked groups\";\n\npattern
batsql.dense_rank(b:bat[:any_1], p:any_2, o:any_3) :bat[:int]\naddress
SQLdense_rank\ncomment \"return the densely ranked groups\";\n\n\npattern
sql.percent_rank(b:any_1, p:bit, o:bit) :dbl\naddress SQLpercent_rank\ncomment
\"return the percentage into the total number of groups for each
row\";\n\npattern batsql.percent_rank(b:bat[:any_1], p:any_2, o:any_3)
:bat[:dbl]\naddress SQLpercent_rank\ncomment \"return the percentage into the
total number of groups for each row\";\n\n\npattern sql.cume_dist(b:any_1, p:b
it, o:bit) :dbl\naddress SQLcume_dist\ncomment \"return the accumulated
distribution of the number of rows per group to the total number of partition
rows\";\n\npattern batsql.cume_dist(b:bat[:any_1], p:any_2, o:any_3)
:bat[:dbl]\naddress SQLcume_dist\ncomment \"return the accumulated distribution
of the number of rows per group to the total number of partition
rows\";\n\n\npattern sql.lag(b:any_1, p:any_3, o:any_4) :any_1\naddress
SQLlag\ncomment \"return the value in the previous row in the partition or NULL
if non existent\";\n\npattern batsql.lag(b:bat[:any_1], p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlag\ncomment \"return the value in the previous row in
the partition or NULL if non existent\";\n\n\npattern sql.lag(b:any_1, l:any_2,
p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment \"return the value in the
previous 'l' row in the partition or NULL if non existent\";\n\npattern
batsql.lag(b:bat[:any_1], l:any_2, p:any_3, o:any_4) :bat[:any_1]\naddress
SQLlag\ncomment \"return
the value in the previous 'l' row in the partition or NULL if non
existent\";\n\npattern sql.lag(b:any_1, l:bat[:any_2], p:any_3, o:any_4)
:any_1\naddress SQLlag\ncomment \"return the value in the previous 'l' row in
the partition or NULL if non existent\";\n\npattern batsql.lag(b:bat[:any_1],
l:bat[:any_2], p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return
the value in the previous 'l' row in the partition or NULL if non
existent\";\n\n\npattern sql.lag(b:any_1, l:any_2, d:any_1, p:any_3, o:any_4)
:any_1\naddress SQLlag\ncomment \"return the value in the previous 'l' row in
the partition or 'd' if non existent\";\n\npattern batsql.lag(b:bat[:any_1],
l:any_2, d:any_1, p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment
\"return the value in the previous 'l' row in the partition or 'd' if non
existent\";\n\npattern sql.lag(b:any_1, l:bat[:any_2], d:any_1, p:any_3,
o:any_4) :any_1\naddress SQLlag\ncomment \"return the value in the previous 'l'
row in the partition
or 'd' if non existent\";\n\npattern batsql.lag(b:bat[:any_1], l:bat[:any_2],
d:any_1, p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return the
value in the previous 'l' row in the partition or 'd' if non
existent\";\n\npattern sql.lag(b:any_1, l:any_2, d:bat[:any_1], p:any_3,
o:any_4) :any_1\naddress SQLlag\ncomment \"return the value in the previous 'l'
row in the partition or 'd' if non existent\";\n\npattern
batsql.lag(b:bat[:any_1], l:any_2, d:bat[:any_1], p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlag\ncomment \"return the value in the previous 'l'
row in the partition or 'd' if non existent\";\n\npattern sql.lag(b:any_1,
l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment
\"return the value in the previous 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lag(b:bat[:any_1], l:bat[:any_2], d:bat[:any_1],
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return the value in
the previous 'l' row in the partition
or 'd' if non existent\";\n\n\npattern sql.lead(b:any_1, p:any_3, o:any_4)
:any_1\naddress SQLlead\ncomment \"return the value in the next row in the
partition or NULL if non existent\";\n\npattern batsql.lead(b:bat[:any_1],
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in
the next row in the partition or NULL if non existent\";\n\n\npattern
sql.lead(b:any_1, l:any_2, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment
\"return the value in the next 'l' row in the partition or NULL if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:any_2, p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next 'l' row
in the partition or NULL if non existent\";\n\npattern sql.lead(b:any_1,
l:bat[:any_2], p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment \"return the
value in the next 'l' row in the partition or NULL if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:bat[:any_2], p:any_3,
o:any_4) :bat[:any_1]\naddress SQLl
ead\ncomment \"return the value in the next 'l' row in the partition or NULL
if non existent\";\n\n\npattern sql.lead(b:any_1, l:any_2, d:any_1, p:any_3,
o:any_4) :any_1\naddress SQLlead\ncomment \"return the value in the next 'l'
row in the partition or 'd' if non existent\";\n\npattern
batsql.lead(b:bat[:any_1], l:any_2, d:any_1, p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next 'l' row
in the partition or 'd' if non existent\";\n\npattern sql.lead(b:any_1,
l:bat[:any_2], d:any_1, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment
\"return the value in the next 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:bat[:any_2], d:any_1,
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in
the next 'l' row in the partition or 'd' if non existent\";\n\npattern
sql.lead(b:any_1, l:any_2, d:bat[:any_1], p:any_3, o:any_4) :any_1\naddress
SQLlead\ncomment \"return the value in the next 'l
' row in the partition or 'd' if non existent\";\n\npattern
batsql.lead(b:bat[:any_1], l:any_2, d:bat[:any_1], p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next 'l' row
in the partition or 'd' if non existent\";\n\npattern sql.lead(b:any_1,
l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4) :any_1\naddress
SQLlead\ncomment \"return the value in the next 'l' row in the partition or 'd'
if non existent\";\n\npattern batsql.lead(b:bat[:any_1], l:bat[:any_2],
d:bat[:any_1], p:any_3, o:any_4) :bat[:any_1]\naddress SQLlead\ncomment
\"return the value in the next 'l' row in the partition or 'd' if non
existent\";\n\n\npattern sql.ntile(b:any_1, n:any_2, p:any_3, o:any_4)
:any_2\naddress SQLntile\ncomment \"return the groups divided as equally as
possible\";\n\npattern batsql.ntile(b:bat[:any_1], n:any_2, p:any_3, o:any_4)
:bat[:any_2]\naddress SQLntile\ncomment \"return the groups divided as equally
as possible\";\n\npattern sql.ntile(b:any_1, n:bat[:any_
2], p:any_3, o:any_4) :any_2\naddress SQLntile\ncomment \"return the groups
divided as equally as possible\";\n\npattern batsql.ntile(b:bat[:any_1],
n:bat[:any_2], p:any_3, o:any_4) :bat[:any_2]\naddress SQLntile\ncomment
\"return the groups divided as equally as possible\";\n\n\npattern
sql.first_value(b:any_1, s:lng, e:lng) :any_1\naddress SQLfirst_value\ncomment
\"return the first value of groups\";\n\npattern
batsql.first_value(b:bat[:any_1], s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLfirst_value\ncomment \"return the first value of
groups\";\n\n\npattern sql.last_value(b:any_1, s:lng, e:lng) :any_1\naddress
SQLlast_value\ncomment \"return the last value of groups\";\n\npattern
batsql.last_value(b:bat[:any_1], s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLlast_value\ncomment \"return the last value of
groups\";\n\n\npattern sql.nth_value(b:any_1, n:any_2, s:lng, e:lng)
:any_1\naddress SQLnth_value\ncomment \"return the nth value of each
group\";\n\npattern batsql.nt
h_value(b:bat[:any_1], n:any_2, s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLnth_value\ncomment \"return the nth value of each
group\";\n\npattern sql.nth_value(b:any_1, n:bat[:any_2], s:lng, e:lng)
:any_1\naddress SQLnth_value\ncomment \"return the nth value of each
group\";\n\npattern batsql.nth_value(b:bat[:any_1], n:bat[:any_2], s:bat[:lng],
e:bat[:lng]) :bat[:any_1]\naddress SQLnth_value\ncomment \"return the nth value
of each group\";\n\n\npattern sql.min(b:any_1, s:lng, e:lng) :any_1\naddress
SQLmin\ncomment \"return the minimum of groups\";\n\npattern
batsql.min(b:bat[:any_1], s:bat[:lng], e:bat[:lng]) :bat[:any_1]\naddress
SQLmin\ncomment \"return the minimum of groups\";\n\npattern sql.max(b:any_1,
s:lng, e:lng) :any_1\naddress SQLmax\ncomment \"return the maximum of
groups\";\n\npattern batsql.max(b:bat[:any_1], s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLmax\ncomment \"return the maximum of
groups\";\n\npattern sql.count(b:any_1, ignils:bit, s:lng, e:lng) :l
ng\naddress SQLcount\ncomment \"return count of groups\";\n\npattern
batsql.count(b:bat[:any_1], ignils:bit, s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLcount\ncomment \"return count of groups\";\n\npattern
sql.sum(b:bte, s:lng, e:lng) :lng\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:bte], s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:bte, s:lng, e:lng) :lng\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:bte], s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:sht, s:lng, e:lng) :lng\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:sht], s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:sht, s:lng, e:lng) :lng\naddress
SQLprod\ncomment \"return the product of groups\
";\n\npattern batsql.prod(b:bat[:sht], s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:int, s:lng, e:lng) :lng\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:int], s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:int, s:lng, e:lng) :lng\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:lng]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.sum(b:lng,
s:lng, e:lng) :lng\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:lng], s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:lng, s:lng, e:lng) :lng\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:lng], s:bat[:lng],
e:bat[:lng])
:bat[:lng]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:flt, s:lng, e:lng) :flt\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:flt], s:bat[:lng],
e:bat[:lng]) :bat[:flt]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:flt, s:lng, e:lng) :flt\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:flt]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.sum(b:flt,
s:lng, e:lng) :dbl\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:flt], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:flt, s:lng, e:lng) :dbl\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:flt], s:bat[:lng],
e:bat[:lng]) :bat[:dbl]\naddress SQLprod\ncomment \"return the product of grou
ps\";\n\npattern sql.sum(b:dbl, s:lng, e:lng) :dbl\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:dbl], s:bat[:lng],
e:bat[:lng]) :bat[:dbl]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:dbl, s:lng, e:lng) :dbl\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:dbl], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.avg(b:bte,
s:lng, e:lng) :dbl\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern batsql.avg(b:bat[:bte], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern sql.avg(b:sht, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:sht],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n\npattern sql.avg(b:int, s:lng, e:lng) :dbl\naddress S
QLavg\ncomment \"return the average of groups\";\n\npattern
batsql.avg(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern sql.avg(b:lng,
s:lng, e:lng) :dbl\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern batsql.avg(b:bat[:lng], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern sql.avg(b:flt, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:flt],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n\npattern sql.avg(b:dbl, s:lng, e:lng) :dbl\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern
batsql.avg(b:bat[:dbl], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLavg\ncomment \"return the average of groups\";\n\ncommand
aggr.exist(b:bat[:any_2], h:any_1):bit\naddress ALGexist;\n\ncommand
aggr.exist(b:bat[:any_2]):bit\na
ddress SQLexist;\n\npattern aggr.exist(v:any_2):bit\naddress SQLexist_val;\n"
},
+{ "sql_rank", "\n\nmodule aggr;\nmodule batsql;\nmodule sql;\n\npattern
sql.diff(b:any_1) :bit\naddress SQLdiff\ncomment \"return true if cur != prev
row\";\n\npattern batsql.diff(b:bat[:any_1]) :bat[:bit]\naddress
SQLdiff\ncomment \"return true if cur != prev row\";\n\npattern sql.diff(p:bit,
b:any_1) :bit\naddress SQLdiff\ncomment \"return true if cur != prev
row\";\n\npattern batsql.diff(p:bat[:bit], b:bat[:any_1]) :bat[:bit]\naddress
SQLdiff\ncomment \"return true if cur != prev row\";\n\npattern
sql.window_bound(b:any_1, unit:int, bound:int, excl:int, limit:bte)
:lng\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, limit:bte) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npattern sql.window_bound(p:bit, b:any_1,
unit:int, bound:int, excl:int, limit:bte) :lng\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\n
pattern batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int,
excl:int, limit:bte) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npattern batsql.window_bound(b:bat[:any_1],
unit:int, bound:int, excl:int, limit:bat[:bte]) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:bte]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.window_bound(b:any_1, unit:int,
bound:int, excl:int, limit:sht) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:sht)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, limit:sht) :lng\naddress SQLwi
ndow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:sht) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int,
bound:int, excl:int, limit:bat[:sht]) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:sht]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.window_bound(b:any_1, unit:int,
bound:int, excl:int, limit:int) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:int)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_
1, unit:int, bound:int, excl:int, limit:int) :lng\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:int) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int,
bound:int, excl:int, limit:bat[:int]) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:int]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.window_bound(b:any_1, unit:int,
bound:int, excl:int, limit:lng) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:lng)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int,
bound:int, excl:int, limit:lng) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:lng) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int,
bound:int, excl:int, limit:bat[:lng]) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:lng]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.window_bound(b:any_1, unit:int,
bound:int, excl:int, limit:flt) :lng\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:flt)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, limit:flt) :lng\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:flt) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:flt]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:flt])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int,
limit:dbl) :lng\naddress SQLwindow_bound\ncomment \"computes window ranges for
each row\";\n\npattern batsql.windo
w_bound(b:bat[:any_1], unit:int, bound:int, excl:int, limit:dbl)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, limit:dbl) :lng\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:dbl) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
limit:bat[:dbl]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:dbl])
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\n\npattern sql.row_number(b:any_1, p:bit, o:bit) :int\naddress
SQLrow_number\ncomment \"return the row_numer-ed groups
\";\n\npattern batsql.row_number(b:bat[:any_1], p:any_2, o:any_3)
:bat[:int]\naddress SQLrow_number\ncomment \"return the row_numer-ed
groups\";\n\n\npattern sql.rank(b:any_1, p:bit, o:bit) :int\naddress
SQLrank\ncomment \"return the ranked groups\";\n\npattern
batsql.rank(b:bat[:any_1], p:any_2, o:any_3) :bat[:int]\naddress
SQLrank\ncomment \"return the ranked groups\";\n\n\npattern
sql.dense_rank(b:any_1, p:bit, o:bit) :int\naddress SQLdense_rank\ncomment
\"return the densely ranked groups\";\n\npattern
batsql.dense_rank(b:bat[:any_1], p:any_2, o:any_3) :bat[:int]\naddress
SQLdense_rank\ncomment \"return the densely ranked groups\";\n\n\npattern
sql.percent_rank(b:any_1, p:bit, o:bit) :dbl\naddress SQLpercent_rank\ncomment
\"return the percentage into the total number of groups for each
row\";\n\npattern batsql.percent_rank(b:bat[:any_1], p:any_2, o:any_3)
:bat[:dbl]\naddress SQLpercent_rank\ncomment \"return the percentage into the
total number of groups for each row\";\n\n\npatt
ern sql.cume_dist(b:any_1, p:bit, o:bit) :dbl\naddress SQLcume_dist\ncomment
\"return the accumulated distribution of the number of rows per group to the
total number of partition rows\";\n\npattern batsql.cume_dist(b:bat[:any_1],
p:any_2, o:any_3) :bat[:dbl]\naddress SQLcume_dist\ncomment \"return the
accumulated distribution of the number of rows per group to the total number of
partition rows\";\n\n\npattern sql.lag(b:any_1, p:any_3, o:any_4)
:any_1\naddress SQLlag\ncomment \"return the value in the previous row in the
partition or NULL if non existent\";\n\npattern batsql.lag(b:bat[:any_1],
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return the value in
the previous row in the partition or NULL if non existent\";\n\n\npattern
sql.lag(b:any_1, l:any_2, p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment
\"return the value in the previous 'l' row in the partition or NULL if non
existent\";\n\npattern batsql.lag(b:bat[:any_1], l:any_2, p:any_3, o:any_4)
:bat[:any_1]\nad
dress SQLlag\ncomment \"return the value in the previous 'l' row in the
partition or NULL if non existent\";\n\npattern sql.lag(b:any_1, l:bat[:any_2],
p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment \"return the value in the
previous 'l' row in the partition or NULL if non existent\";\n\npattern
batsql.lag(b:bat[:any_1], l:bat[:any_2], p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlag\ncomment \"return the value in the previous 'l'
row in the partition or NULL if non existent\";\n\n\npattern sql.lag(b:any_1,
l:any_2, d:any_1, p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment \"return
the value in the previous 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lag(b:bat[:any_1], l:any_2, d:any_1, p:any_3,
o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return the value in the
previous 'l' row in the partition or 'd' if non existent\";\n\npattern
sql.lag(b:any_1, l:bat[:any_2], d:any_1, p:any_3, o:any_4) :any_1\naddress
SQLlag\ncomment \"return the value in the prev
ious 'l' row in the partition or 'd' if non existent\";\n\npattern
batsql.lag(b:bat[:any_1], l:bat[:any_2], d:any_1, p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlag\ncomment \"return the value in the previous 'l'
row in the partition or 'd' if non existent\";\n\npattern sql.lag(b:any_1,
l:any_2, d:bat[:any_1], p:any_3, o:any_4) :any_1\naddress SQLlag\ncomment
\"return the value in the previous 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lag(b:bat[:any_1], l:any_2, d:bat[:any_1],
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlag\ncomment \"return the value in
the previous 'l' row in the partition or 'd' if non existent\";\n\npattern
sql.lag(b:any_1, l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4)
:any_1\naddress SQLlag\ncomment \"return the value in the previous 'l' row in
the partition or 'd' if non existent\";\n\npattern batsql.lag(b:bat[:any_1],
l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4) :bat[:any_1]\naddress
SQLlag\ncomment \"return the value in the prev
ious 'l' row in the partition or 'd' if non existent\";\n\n\npattern
sql.lead(b:any_1, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment \"return
the value in the next row in the partition or NULL if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], p:any_3, o:any_4)
:bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next row in
the partition or NULL if non existent\";\n\n\npattern sql.lead(b:any_1,
l:any_2, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment \"return the value
in the next 'l' row in the partition or NULL if non existent\";\n\npattern
batsql.lead(b:bat[:any_1], l:any_2, p:any_3, o:any_4) :bat[:any_1]\naddress
SQLlead\ncomment \"return the value in the next 'l' row in the partition or
NULL if non existent\";\n\npattern sql.lead(b:any_1, l:bat[:any_2], p:any_3,
o:any_4) :any_1\naddress SQLlead\ncomment \"return the value in the next 'l'
row in the partition or NULL if non existent\";\n\npattern
batsql.lead(b:bat[:any_1], l:bat[:any_2], p:any_3, o:any
_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next 'l'
row in the partition or NULL if non existent\";\n\n\npattern sql.lead(b:any_1,
l:any_2, d:any_1, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment \"return
the value in the next 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:any_2, d:any_1, p:any_3,
o:any_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in the next
'l' row in the partition or 'd' if non existent\";\n\npattern sql.lead(b:any_1,
l:bat[:any_2], d:any_1, p:any_3, o:any_4) :any_1\naddress SQLlead\ncomment
\"return the value in the next 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:bat[:any_2], d:any_1,
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in
the next 'l' row in the partition or 'd' if non existent\";\n\npattern
sql.lead(b:any_1, l:any_2, d:bat[:any_1], p:any_3, o:any_4) :any_1\naddress
SQLlead\ncomment \"r
eturn the value in the next 'l' row in the partition or 'd' if non
existent\";\n\npattern batsql.lead(b:bat[:any_1], l:any_2, d:bat[:any_1],
p:any_3, o:any_4) :bat[:any_1]\naddress SQLlead\ncomment \"return the value in
the next 'l' row in the partition or 'd' if non existent\";\n\npattern
sql.lead(b:any_1, l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4)
:any_1\naddress SQLlead\ncomment \"return the value in the next 'l' row in the
partition or 'd' if non existent\";\n\npattern batsql.lead(b:bat[:any_1],
l:bat[:any_2], d:bat[:any_1], p:any_3, o:any_4) :bat[:any_1]\naddress
SQLlead\ncomment \"return the value in the next 'l' row in the partition or 'd'
if non existent\";\n\n\npattern sql.ntile(b:any_1, n:any_2, p:any_3, o:any_4)
:any_2\naddress SQLntile\ncomment \"return the groups divided as equally as
possible\";\n\npattern batsql.ntile(b:bat[:any_1], n:any_2, p:any_3, o:any_4)
:bat[:any_2]\naddress SQLntile\ncomment \"return the groups divided as equally
as possible\";\n\npattern
sql.ntile(b:any_1, n:bat[:any_2], p:any_3, o:any_4) :any_2\naddress
SQLntile\ncomment \"return the groups divided as equally as
possible\";\n\npattern batsql.ntile(b:bat[:any_1], n:bat[:any_2], p:any_3,
o:any_4) :bat[:any_2]\naddress SQLntile\ncomment \"return the groups divided as
equally as possible\";\n\n\npattern sql.first_value(b:any_1, s:lng, e:lng)
:any_1\naddress SQLfirst_value\ncomment \"return the first value of
groups\";\n\npattern batsql.first_value(b:bat[:any_1], s:bat[:lng],
e:bat[:lng]) :bat[:any_1]\naddress SQLfirst_value\ncomment \"return the first
value of groups\";\n\n\npattern sql.last_value(b:any_1, s:lng, e:lng)
:any_1\naddress SQLlast_value\ncomment \"return the last value of
groups\";\n\npattern batsql.last_value(b:bat[:any_1], s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLlast_value\ncomment \"return the last value of
groups\";\n\n\npattern sql.nth_value(b:any_1, n:any_2, s:lng, e:lng)
:any_1\naddress SQLnth_value\ncomment \"return the nth value of each
group\";\n\npattern batsql.nth_value(b:bat[:any_1], n:any_2, s:bat[:lng],
e:bat[:lng]) :bat[:any_1]\naddress SQLnth_value\ncomment \"return the nth value
of each group\";\n\npattern sql.nth_value(b:any_1, n:bat[:any_2], s:lng, e:lng)
:any_1\naddress SQLnth_value\ncomment \"return the nth value of each
group\";\n\npattern batsql.nth_value(b:bat[:any_1], n:bat[:any_2], s:bat[:lng],
e:bat[:lng]) :bat[:any_1]\naddress SQLnth_value\ncomment \"return the nth value
of each group\";\n\n\npattern sql.min(b:any_1, s:lng, e:lng) :any_1\naddress
SQLmin\ncomment \"return the minimum of groups\";\n\npattern
batsql.min(b:bat[:any_1], s:bat[:lng], e:bat[:lng]) :bat[:any_1]\naddress
SQLmin\ncomment \"return the minimum of groups\";\n\npattern sql.max(b:any_1,
s:lng, e:lng) :any_1\naddress SQLmax\ncomment \"return the maximum of
groups\";\n\npattern batsql.max(b:bat[:any_1], s:bat[:lng], e:bat[:lng])
:bat[:any_1]\naddress SQLmax\ncomment \"return the maximum of
groups\";\n\npattern sql.count(b:any_1
, ignils:bit, s:lng, e:lng) :lng\naddress SQLcount\ncomment \"return count of
groups\";\n\npattern batsql.count(b:bat[:any_1], ignils:bit, s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLcount\ncomment \"return count of
groups\";\n\npattern sql.sum(b:bte, s:lng, e:lng) :lng\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:bte], s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:bte, s:lng, e:lng) :lng\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:bte], s:bat[:lng], e:bat[:lng]) :bat[:lng]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.sum(b:sht,
s:lng, e:lng) :lng\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:sht], s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:sht, s:lng, e:lng) :lng\naddress SQLprod\ncomment \
"return the product of groups\";\n\npattern batsql.prod(b:bat[:sht],
s:bat[:lng], e:bat[:lng]) :bat[:lng]\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern sql.sum(b:int, s:lng, e:lng) :lng\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:lng]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:int, s:lng,
e:lng) :lng\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:int], s:bat[:lng], e:bat[:lng])
:bat[:lng]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:lng, s:lng, e:lng) :lng\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:lng], s:bat[:lng],
e:bat[:lng]) :bat[:lng]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:lng, s:lng, e:lng) :lng\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:ln
g], s:bat[:lng], e:bat[:lng]) :bat[:lng]\naddress SQLprod\ncomment \"return
the product of groups\";\n\npattern sql.sum(b:flt, s:lng, e:lng) :flt\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:flt]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:flt, s:lng,
e:lng) :flt\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:flt], s:bat[:lng], e:bat[:lng])
:bat[:flt]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:flt, s:lng, e:lng) :dbl\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:flt], s:bat[:lng],
e:bat[:lng]) :bat[:dbl]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:flt, s:lng, e:lng) :dbl\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLprod\ncommen
t \"return the product of groups\";\n\npattern sql.sum(b:dbl, s:lng, e:lng)
:dbl\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:dbl], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:dbl, s:lng,
e:lng) :dbl\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:dbl], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.avg(b:bte, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:bte],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n\npattern sql.avg(b:sht, s:lng, e:lng) :dbl\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern
batsql.avg(b:bat[:sht], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern sql.avg(b:int,
s:lng, e:lng) :dbl\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern batsql.avg(b:bat[:int], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern sql.avg(b:lng, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:lng],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n\npattern sql.avg(b:flt, s:lng, e:lng) :dbl\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern
batsql.avg(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress
SQLavg\ncomment \"return the average of groups\";\n\npattern sql.avg(b:dbl,
s:lng, e:lng) :dbl\naddress SQLavg\ncomment \"return the average of
groups\";\n\npattern batsql.avg(b:bat[:dbl], s:bat[:lng], e:bat[:lng])
:bat[:dbl]\naddress SQLavg\ncomment \"return the average of
groups\";\n\ncommand aggr.exist(b:bat[:any_2], h:any_1):bit\naddress
ALGexist;\n\ncommand ag
gr.exist(b:bat[:any_2]):bit\naddress SQLexist;\n\npattern
aggr.exist(v:any_2):bit\naddress SQLexist_val;\n" },
diff --git a/sql/backends/monet5/sql_rank_hge.mal
b/sql/backends/monet5/sql_rank_hge.mal
--- a/sql/backends/monet5/sql_rank_hge.mal
+++ b/sql/backends/monet5/sql_rank_hge.mal
@@ -6,6 +6,7 @@
# This file was generated by using the script sql_rank_hge.mal.sh.
+module batsql;
module sql;
pattern sql.window_bound(b:any_1, unit:int, bound:int, excl:int, start:hge)
:lng
diff --git a/sql/backends/monet5/sql_rank_hge.mal.h
b/sql/backends/monet5/sql_rank_hge.mal.h
--- a/sql/backends/monet5/sql_rank_hge.mal.h
+++ b/sql/backends/monet5/sql_rank_hge.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "sql_rank_hge", "\n\nmodule sql;\n\npattern sql.window_bound(b:any_1,
unit:int, bound:int, excl:int, start:hge) :lng\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int, start:hge)
:bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern sql.window_bound(p:bit, b:any_1, unit:int, bound:int,
excl:int, start:hge) :lng\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, start:hge) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(b:bat[:any_1], unit:int, bound:int, excl:int,
start:bat[:hge]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(p:bat[:bit],
b:bat[:any_1], unit:int, bound:int, excl:int, start:
bat[:hge]) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\n\npattern sql.sum(b:bte, s:lng, e:lng) :hge\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:bte], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:bte, s:lng,
e:lng) :hge\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:bte], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:sht, s:lng, e:lng) :hge\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:sht], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:sht, s:lng, e:lng) :hge\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:sht], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLprod\ncomment
\"return the product of groups\";\n\npattern sql.sum(b:int, s:lng, e:lng)
:hge\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:int, s:lng,
e:lng) :hge\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:int], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:lng, s:lng, e:lng) :hge\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:lng], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:lng, s:lng, e:lng) :hge\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:lng], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.sum(b:hge,
s:lng
, e:lng) :hge\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:hge], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:hge, s:lng, e:lng) :hge\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:hge], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.avg(b:hge, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:hge],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n" },
+{ "sql_rank_hge", "\n\nmodule batsql;\nmodule sql;\n\npattern
sql.window_bound(b:any_1, unit:int, bound:int, excl:int, start:hge)
:lng\naddress SQLwindow_bound\ncomment \"computes window ranges for each
row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int, bound:int,
excl:int, start:hge) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes
window ranges for each row\";\n\npattern sql.window_bound(p:bit, b:any_1,
unit:int, bound:int, excl:int, start:hge) :lng\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int, excl:int,
start:hge) :bat[:lng]\naddress SQLwindow_bound\ncomment \"computes window
ranges for each row\";\n\npattern batsql.window_bound(b:bat[:any_1], unit:int,
bound:int, excl:int, start:bat[:hge]) :bat[:lng]\naddress
SQLwindow_bound\ncomment \"computes window ranges for each row\";\n\npattern
batsql.window_bound(p:bat[:bit], b:bat[:any_1], unit:int, bound:int,
excl:int, start:bat[:hge]) :bat[:lng]\naddress SQLwindow_bound\ncomment
\"computes window ranges for each row\";\n\n\npattern sql.sum(b:bte, s:lng,
e:lng) :hge\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
batsql.sum(b:bat[:bte], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLsum\ncomment \"return the sum of groups\";\n\npattern sql.prod(b:bte, s:lng,
e:lng) :hge\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern batsql.prod(b:bat[:bte], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:sht, s:lng, e:lng) :hge\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:sht], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:sht, s:lng, e:lng) :hge\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:sht], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress S
QLprod\ncomment \"return the product of groups\";\n\npattern sql.sum(b:int,
s:lng, e:lng) :hge\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:int], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:int, s:lng, e:lng) :hge\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:int], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.sum(b:lng, s:lng, e:lng) :hge\naddress SQLsum\ncomment
\"return the sum of groups\";\n\npattern batsql.sum(b:bat[:lng], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern sql.prod(b:lng, s:lng, e:lng) :hge\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern
batsql.prod(b:bat[:lng], s:bat[:lng], e:bat[:lng]) :bat[:hge]\naddress
SQLprod\ncomment \"return the product of groups\";\n\npattern sql.
sum(b:hge, s:lng, e:lng) :hge\naddress SQLsum\ncomment \"return the sum of
groups\";\n\npattern batsql.sum(b:bat[:hge], s:bat[:lng], e:bat[:lng])
:bat[:hge]\naddress SQLsum\ncomment \"return the sum of groups\";\n\npattern
sql.prod(b:hge, s:lng, e:lng) :hge\naddress SQLprod\ncomment \"return the
product of groups\";\n\npattern batsql.prod(b:bat[:hge], s:bat[:lng],
e:bat[:lng]) :bat[:hge]\naddress SQLprod\ncomment \"return the product of
groups\";\n\npattern sql.avg(b:hge, s:lng, e:lng) :dbl\naddress SQLavg\ncomment
\"return the average of groups\";\n\npattern batsql.avg(b:bat[:hge],
s:bat[:lng], e:bat[:lng]) :bat[:dbl]\naddress SQLavg\ncomment \"return the
average of groups\";\n" },
diff --git a/tools/Makefile.ag b/tools/Makefile.ag
--- a/tools/Makefile.ag
+++ b/tools/Makefile.ag
@@ -4,4 +4,4 @@
#
# Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
-SUBDIRS = HAVE_MONETDB5?mserver NOT_WIN32?merovingian
+SUBDIRS = HAVE_MONETDB5?sql HAVE_MONETDB5?mserver NOT_WIN32?merovingian
diff --git a/tools/mserver/Makefile.ag b/tools/mserver/Makefile.ag
--- a/tools/mserver/Makefile.ag
+++ b/tools/mserver/Makefile.ag
@@ -46,7 +46,7 @@ headers_png = {
bin_mserver5 = {
# hack: include mserver5.1.in here to get it expanded
SOURCES = mserver5.c monet_version.h monet_version.c.in
- LIBS = ../../sql/backends/monet5/libsqlstart \
+ LIBS = ../sql/libsql \
../../monetdb5/tools/libmonetdb5 \
../../gdk/libbat \
../../common/stream/libstream \
@@ -74,7 +74,7 @@ bin_mserver5 = {
bin_shutdowntest = {
CONDINST = HAVE_TESTING
SOURCES = shutdowntest.c
- LIBS = ../../sql/backends/monet5/libsqlstart \
+ LIBS = ../sql/libsql \
../../monetdb5/tools/libmonetdb5 \
../../gdk/libbat \
../../common/stream/libstream \
diff --git a/tools/Makefile.ag b/tools/sql/Makefile.ag
copy from tools/Makefile.ag
copy to tools/sql/Makefile.ag
--- a/tools/Makefile.ag
+++ b/tools/sql/Makefile.ag
@@ -4,4 +4,23 @@
#
# Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
-SUBDIRS = HAVE_MONETDB5?mserver NOT_WIN32?merovingian
+MTSAFE
+
+lib_sql = {
+ VERSION = $(MONETDB5_VERSION)
+ NAME = sql
+ DIR = libdir
+ SOURCES = libsql.rc
+ # libmapi on Windows for mcrypt_*
+ LIBS = ../../sql/backends/monet5/libsqlcatalog \
+ ../../sql/server/libsqlserver \
+ ../../sql/scripts/libsqlscripts \
+ ../../sql/storage/libstore \
+ ../../sql/storage/bat/libbatstore \
+ ../../sql/common/libsqlcommon \
+ WIN32?../../clients/mapilib/libmapi \
+ WIN32?../../monetdb5/tools/libmonetdb5 \
+ WIN32?../../gdk/libbat \
+ WIN32?../../common/stream/libstream \
+ WIN32?$(openssl_LIBS)
+}
diff --git a/vertoo.config b/vertoo.config
--- a/vertoo.config
+++ b/vertoo.config
@@ -39,3 +39,8 @@ main.addAnchors("monetdb5/tools/libmonet
'VALUE "ProductVersion", "%v\\0"',
arguments(pattern = 'FILEVERSION %v', format = '@winrc'),
arguments(pattern = 'PRODUCTVERSION %v', format = '@winrc'))
+main.addAnchors("tools/sql/libmonetdb5.rc",
+ 'VALUE "FileVersion", "%v\\0"',
+ 'VALUE "ProductVersion", "%v\\0"',
+ arguments(pattern = 'FILEVERSION %v', format = '@winrc'),
+ arguments(pattern = 'PRODUCTVERSION %v', format = '@winrc'))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list