Changeset: 198a634ed782 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=198a634ed782 Added Files: common/utils/revision.c gdk/gdk_analytic.h gdk/gdk_analytic_bounds.c gdk/gdk_analytic_func.c gdk/gdk_string.c monetdb5/modules/atoms/mtime_analytic.c monetdb5/modules/atoms/strptime.c sql/backends/monet5/sql_rank.mal.sh sql/backends/monet5/sql_rank_hge.mal sql/backends/monet5/sql_rank_hge.mal.sh sql/benchmarks/tpcds/Tests/11.reqtests sql/benchmarks/tpcds/Tests/11.sql sql/benchmarks/tpcds/Tests/38.reqtests sql/benchmarks/tpcds/Tests/38.sql sql/benchmarks/tpcds/Tests/72.reqtests sql/benchmarks/tpcds/Tests/72.sql sql/benchmarks/tpcds/Tests/83.reqtests sql/benchmarks/tpcds/Tests/83.sql sql/benchmarks/tpcds/Tests/98.reqtests sql/benchmarks/tpcds/Tests/98.sql sql/benchmarks/tpcds/Tests/99.reqtests sql/benchmarks/tpcds/Tests/99.sql sql/benchmarks/tpcds/Tests/All sql/benchmarks/tpcds/Tests/alter.reqtests sql/benchmarks/tpcds/Tests/alter.sql sql/benchmarks/tpcds/Tests/alter.stable.err sql/benchmarks/tpcds/Tests/alter.stable.out sql/benchmarks/tpcds/Tests/check0.reqtests sql/benchmarks/tpcds/Tests/check0.sql sql/benchmarks/tpcds/Tests/check0.stable.err sql/benchmarks/tpcds/Tests/check0.stable.out sql/benchmarks/tpcds/Tests/check1.reqtests sql/benchmarks/tpcds/Tests/check1.sql sql/benchmarks/tpcds/Tests/check1.stable.err sql/benchmarks/tpcds/Tests/check1.stable.out sql/benchmarks/tpcds/Tests/create.sql sql/benchmarks/tpcds/Tests/create.stable.err sql/benchmarks/tpcds/Tests/create.stable.out sql/benchmarks/tpcds/Tests/drop.sql sql/benchmarks/tpcds/Tests/drop.stable.err sql/benchmarks/tpcds/Tests/drop.stable.out sql/benchmarks/tpcds/Tests/load.reqtests sql/benchmarks/tpcds/Tests/load.sql.in sql/benchmarks/tpcds/Tests/load.stable.err sql/benchmarks/tpcds/Tests/load.stable.out sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--optimizers.options5 sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--performance.options5 sql/test/BugTracker-2018/Tests/alter-sequence-subquery.Bug-6657.sql sql/test/BugTracker-2018/Tests/alter-sequence-subquery.Bug-6657.stable.err sql/test/BugTracker-2018/Tests/alter-sequence-subquery.Bug-6657.stable.out sql/test/BugTracker-2018/Tests/copy-into-doubled.Bug-6666.sql sql/test/BugTracker-2018/Tests/copy-into-doubled.Bug-6666.stable.err sql/test/BugTracker-2018/Tests/copy-into-doubled.Bug-6666.stable.out sql/test/BugTracker-2018/Tests/create_table_empty_column_name.Bug-6653.sql sql/test/BugTracker-2018/Tests/create_table_empty_column_name.Bug-6653.stable.err sql/test/BugTracker-2018/Tests/create_table_empty_column_name.Bug-6653.stable.out sql/test/BugTracker-2018/Tests/global-temp-tables.Bug-6643.sql sql/test/BugTracker-2018/Tests/global-temp-tables.Bug-6643.stable.err sql/test/BugTracker-2018/Tests/global-temp-tables.Bug-6643.stable.out sql/test/BugTracker-2018/Tests/grant-role-not-idempotent.Bug-6660.py sql/test/BugTracker-2018/Tests/grant-role-not-idempotent.Bug-6660.stable.err sql/test/BugTracker-2018/Tests/grant-role-not-idempotent.Bug-6660.stable.out sql/test/BugTracker-2018/Tests/lateral-join-crash.Bug-6613.sql sql/test/BugTracker-2018/Tests/negative-sequences.Bug-6665.sql sql/test/BugTracker-2018/Tests/negative-sequences.Bug-6665.stable.err sql/test/BugTracker-2018/Tests/negative-sequences.Bug-6665.stable.out sql/test/BugTracker-2018/Tests/prepared-statement-with-udf.Bug-6650.stable.err sql/test/BugTracker-2018/Tests/prepared-statement-with-udf.Bug-6650.stable.out sql/test/BugTracker-2018/Tests/procedure-create-table.Bug-6604.stable.err sql/test/BugTracker-2018/Tests/procedure-create-table.Bug-6604.stable.out sql/test/BugTracker-2018/Tests/quantile-crash.Bug-6658.sql sql/test/BugTracker-2018/Tests/quantile-crash.Bug-6658.stable.err sql/test/BugTracker-2018/Tests/quantile-crash.Bug-6658.stable.out sql/test/BugTracker-2018/Tests/select_where_true.Bug-6654.sql sql/test/BugTracker-2018/Tests/select_where_true.Bug-6654.stable.err sql/test/BugTracker-2018/Tests/select_where_true.Bug-6654.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.err sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.out.int128 sql/test/analytics/Tests/All sql/test/analytics/Tests/analytics00.sql sql/test/analytics/Tests/analytics00.stable.err sql/test/analytics/Tests/analytics00.stable.out sql/test/analytics/Tests/analytics01.sql sql/test/analytics/Tests/analytics01.stable.err sql/test/analytics/Tests/analytics01.stable.out sql/test/analytics/Tests/analytics02.sql sql/test/analytics/Tests/analytics02.stable.err sql/test/analytics/Tests/analytics02.stable.out sql/test/analytics/Tests/analytics03.sql sql/test/analytics/Tests/analytics03.stable.err sql/test/analytics/Tests/analytics03.stable.out sql/test/analytics/Tests/analytics04.sql sql/test/analytics/Tests/analytics04.stable.err sql/test/analytics/Tests/analytics04.stable.out sql/test/analytics/Tests/analytics05.sql sql/test/analytics/Tests/analytics05.stable.err sql/test/analytics/Tests/analytics05.stable.out sql/test/analytics/Tests/analytics06.sql sql/test/analytics/Tests/analytics06.stable.err sql/test/analytics/Tests/analytics06.stable.out sql/test/analytics/Tests/analytics07.sql sql/test/analytics/Tests/analytics07.stable.err sql/test/analytics/Tests/analytics07.stable.out sql/test/analytics/Tests/analytics08.sql sql/test/analytics/Tests/analytics08.stable.err sql/test/analytics/Tests/analytics08.stable.out sql/test/analytics/Tests/analytics09.sql sql/test/analytics/Tests/analytics09.stable.err sql/test/analytics/Tests/analytics09.stable.out sql/test/miscellaneous/Tests/simple_selects.sql sql/test/miscellaneous/Tests/simple_selects.stable.err sql/test/miscellaneous/Tests/simple_selects.stable.out sql/test/rename/Tests/All sql/test/rename/Tests/rename00.py sql/test/rename/Tests/rename00.stable.err sql/test/rename/Tests/rename00.stable.out sql/test/rename/Tests/rename01.sql sql/test/rename/Tests/rename01.stable.err sql/test/rename/Tests/rename01.stable.out sql/test/rename/Tests/rename02.sql sql/test/rename/Tests/rename02.stable.err sql/test/rename/Tests/rename02.stable.out sql/test/rename/Tests/rename03.sql sql/test/rename/Tests/rename03.stable.err sql/test/rename/Tests/rename03.stable.out sql/test/rename/Tests/rename04.sql sql/test/rename/Tests/rename04.stable.err sql/test/rename/Tests/rename04.stable.out sql/test/rename/Tests/rename05.sql sql/test/rename/Tests/rename05.stable.err sql/test/rename/Tests/rename05.stable.out sql/test/rename/Tests/rename06.sql sql/test/rename/Tests/rename06.stable.err sql/test/rename/Tests/rename06.stable.out sql/test/testdb-reload/Tests/All sql/test/testdb-reload/Tests/reload.py sql/test/testdb-reload/Tests/reload.stable.err sql/test/testdb-reload/Tests/reload.stable.out sql/test/testdb-reload/Tests/reload.timeout sql/test/testdb/Tests/dump-nogeom.reqtests sql/test/testdb/Tests/dump-nogeom.sql sql/test/testdb/Tests/dump-nogeom.stable.err sql/test/testdb/Tests/dump-nogeom.stable.out sql/test/testdb/Tests/dump.reqtests sql/test/testdb/Tests/dump.sql sql/test/testdb/Tests/dump.stable.err sql/test/testdb/Tests/dump.stable.out sql/test/testdb/Tests/dump.timeout sql/test/testdb/Tests/load-geom.reqtests sql/test/testdb/Tests/load-geom.sql sql/test/testdb/Tests/load-geom.stable.err sql/test/testdb/Tests/load-geom.stable.out sql/test/testdb/Tests/load.sql sql/test/testdb/Tests/load.stable.err sql/test/testdb/Tests/load.stable.out sql/test/testdb/Tests/load.timeout sql/test/testdb/Tests/package-hge.py sql/test/testdb/Tests/package-hge.stable.err sql/test/testdb/Tests/package-hge.stable.out.int128 sql/test/testdb/Tests/package.py sql/test/testdb/Tests/package.reqtests sql/test/testdb/Tests/package.stable.err sql/test/testdb/Tests/package.stable.out Removed Files: common/utils/strptime.cpp monetdb5/modules/atoms/Tests/curl00.malC monetdb5/modules/atoms/Tests/curl00.stable.err monetdb5/modules/atoms/Tests/curl00.stable.out monetdb5/modules/atoms/mcurl.c monetdb5/modules/atoms/mcurl.mal sql/backends/monet5/vaults/70_vault.mal sql/backends/monet5/vaults/Tests/vault00.malC sql/backends/monet5/vaults/vault.c sql/backends/monet5/vaults/vault.h sql/backends/monet5/vaults/vault.mal sql/backends/monet5/vaults/vault.sql sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--optimizers.dbinit5 sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--performance.dbinit5 sql/test/testdb/Tests/testdb-dump.reqtests sql/test/testdb/Tests/testdb-dump.sql sql/test/testdb/Tests/testdb-dump.stable.err sql/test/testdb/Tests/testdb-dump.stable.out sql/test/testdb/Tests/testdb-dump.timeout sql/test/testdb/Tests/testdb-load.sql sql/test/testdb/Tests/testdb-load.stable.err sql/test/testdb/Tests/testdb-load.stable.out sql/test/testdb/Tests/testdb-load.timeout sql/test/testdb/Tests/testdb-package-hge.py sql/test/testdb/Tests/testdb-package-hge.stable.err sql/test/testdb/Tests/testdb-package-hge.stable.out.int128 sql/test/testdb/Tests/testdb-package.py sql/test/testdb/Tests/testdb-package.reqtests sql/test/testdb/Tests/testdb-package.stable.err sql/test/testdb/Tests/testdb-package.stable.out Modified Files: MonetDB.spec NT/rules.msc clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/dump.c clients/mapiclient/mclient.1 clients/mapiclient/mclient.c clients/mapiclient/mhelp.c clients/mapiclient/msqldump.c clients/mapiclient/msqldump.h common/stream/stream.c common/utils/Makefile.ag configure.ag debian/monetdb5-server.install gdk/ChangeLog gdk/Makefile.ag gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_align.c gdk/gdk_atoms.c gdk/gdk_atoms.h gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_calc.c gdk/gdk_calc_private.h gdk/gdk_delta.c gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_hash.h gdk/gdk_heap.c gdk/gdk_imprints.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_logger.h gdk/gdk_orderidx.c gdk/gdk_private.h gdk/gdk_qsort.c gdk/gdk_qsort_impl.h gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_tm.c gdk/gdk_utils.c gdk/gdk_value.c geom/monetdb5/geom.c geom/monetdb5/geom.h monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows monetdb5/extras/rapi/converters.c.h monetdb5/mal/mal_atom.c monetdb5/mal/mal_instruction.c monetdb5/modules/atoms/Makefile.ag monetdb5/modules/atoms/batxml.c monetdb5/modules/atoms/blob.c monetdb5/modules/atoms/blob.h monetdb5/modules/atoms/color.c monetdb5/modules/atoms/color.h monetdb5/modules/atoms/identifier.c monetdb5/modules/atoms/inet.c monetdb5/modules/atoms/json.c monetdb5/modules/atoms/json.h monetdb5/modules/atoms/mtime.c monetdb5/modules/atoms/mtime.h monetdb5/modules/atoms/url.c monetdb5/modules/atoms/url.h monetdb5/modules/atoms/uuid.c monetdb5/modules/atoms/xml.c monetdb5/modules/atoms/xml.h monetdb5/modules/kernel/aggr.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/batstr.c monetdb5/modules/mal/batcalc.c monetdb5/modules/mal/mal_io.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/mkey.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/remote.c monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tokenizer.c monetdb5/modules/mal/wlc.mal monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h monetdb5/optimizer/opt_support.c monetdb5/tools/Makefile.ag rpm.mk.in sql/ChangeLog sql/backends/monet5/UDF/capi/capi.c sql/backends/monet5/UDF/pyapi/conversion.c sql/backends/monet5/UDF/pyapi/convert_loops.h sql/backends/monet5/UDF/pyapi/type_conversion.c sql/backends/monet5/UDF/udf/udf.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql_bat2time.c sql/backends/monet5/sql_cast.c sql/backends/monet5/sql_cast_impl_down_from_flt.h sql/backends/monet5/sql_cast_impl_int.h sql/backends/monet5/sql_cast_impl_up_to_flt.h sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_cat.h sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_rank.h sql/backends/monet5/sql_rank.mal sql/backends/monet5/sql_result.c sql/backends/monet5/sql_round_impl.h sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h sql/backends/monet5/sql_upgrades.c sql/backends/monet5/sqlcatalog.mal sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128 sql/backends/monet5/vaults/bam/bam_db_interface.c sql/backends/monet5/vaults/bam/bam_export.c sql/backends/monet5/vaults/bam/bam_lib.c sql/backends/monet5/wlr.mal sql/common/sql_list.c sql/common/sql_string.c sql/common/sql_types.c sql/include/sql_catalog.h sql/include/sql_relation.h sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.stable.out sql/scripts/75_storagemodel.sql sql/server/rel_dump.c sql/server/rel_optimizer.c sql/server/rel_psm.c sql/server/rel_schema.c sql/server/rel_select.c sql/server/rel_semantic.c sql/server/rel_sequence.c sql/server/rel_updates.c sql/server/sql_atom.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/server/sql_parser.h sql/server/sql_parser.y sql/server/sql_partition.c sql/server/sql_partition.h sql/server/sql_privileges.c sql/server/sql_scan.c sql/storage/bat/bat_logger.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c sql/storage/sql_catalog.c sql/storage/sql_storage.h sql/storage/store.c sql/test/BugDay_2005-10-06_2.9.3/Tests/UNION_JOIN_vs_plain_set_UNION-2.SF-920585.sql sql/test/BugDay_2005-10-06_2.9.3/Tests/foreign_key_in_frontend_crashes_backend.SF-935578.sql sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.err sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows sql/test/BugTracker-2010/Tests/multiple-common-table-expressions.Bug-2664.sql sql/test/BugTracker-2012/Tests/strange_escaping_in_csv.Bug-2133.sql sql/test/BugTracker-2012/Tests/strange_escaping_in_csv.Bug-2133.stable.out sql/test/BugTracker-2013/Tests/aggregates-typing-issues.Bug-3277.sql sql/test/BugTracker-2013/Tests/median-null.Bug-3280.sql sql/test/BugTracker-2014/Tests/null_in_string.Bug-2014.sql sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out sql/test/BugTracker-2015/Tests/is_null_limit.Bug-3684.sql sql/test/BugTracker-2016/Tests/storagemodel.stable.out sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out sql/test/BugTracker-2017/Tests/semijoinunion.Bug-6150.sql sql/test/BugTracker-2018/Tests/All sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out sql/test/BugTracker-2018/Tests/groupby_having_orderby_count.Bug-6624.stable.out sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.sql sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.sql sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out.int128 sql/test/Dependencies/Tests/dependency_loop.stable.out sql/test/Dependencies/Tests/dependency_loop.stable.out.int128 sql/test/Dump/Tests/dump.stable.out sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128 sql/test/Tests/rank.stable.out sql/test/Tests/systemfunctions.stable.out sql/test/Tests/systemfunctions.stable.out.int128 sql/test/bugs/Tests/innerjoin_multiple-bug-sf-943661.stable.out sql/test/copy/Tests/int_parse.sql sql/test/copy/Tests/int_parse.stable.err sql/test/copy/Tests/int_parse_best.sql sql/test/copy/Tests/key_copy.sql sql/test/copy/Tests/key_copy.stable.err sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/group-concat/Tests/groupconcat05.stable.out sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.sql sql/test/orderidx/Tests/imprints_all_types.stable.out sql/test/orderidx/Tests/oidx_all_types.stable.out sql/test/pg_regress/Tests/point.stable.out sql/test/rank.sql sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/dump.stable.out.int128 sql/test/testdb-upgrade/Tests/dump.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out.powerpc64.int128 sql/test/testdb/Tests/All testing/Mtest.py.in testing/malcheck.py testing/process.py tools/merovingian/client/monetdb.c tools/merovingian/daemon/argvcmds.c tools/merovingian/daemon/merovingian.c tools/mserver/monet_version.c.in tools/mserver/mserver5.1.in tools/mserver/mserver5.c Branch: delete_in_vlist Log Message:
Merge with default. diffs (truncated from 225082 to 300 lines): diff --git a/common/utils/revision.c b/common/utils/revision.c new file mode 100644 --- /dev/null +++ b/common/utils/revision.c @@ -0,0 +1,26 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + */ + +#include "monetdb_config.h" +#include "monetdb_hgversion.h" +#include <string.h> +#include "mutils.h" + +static const char revision[] = +#ifdef MERCURIAL_ID + MERCURIAL_ID +#else + "Unknown" +#endif + ; + +const char * +mercurial_revision(void) +{ + return revision; +} diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h new file mode 100644 --- /dev/null +++ b/gdk/gdk_analytic.h @@ -0,0 +1,38 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + */ + +/* +* Pedro Ferreira +* This file contains declarations for SQL window analytical functions. +*/ + +#ifndef _GDK_ANALYTIC_H_ +#define _GDK_ANALYTIC_H_ + +#include "gdk.h" + +gdk_export gdk_return GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, int tpe); + +gdk_export gdk_return GDKanalyticalntile(BAT *r, BAT *b, BAT *p, int tpe, const void* restrict ntile); +gdk_export gdk_return GDKanalyticallag(BAT *r, BAT *b, BAT *p, BUN lag, const void* restrict default_value, int tpe); +gdk_export gdk_return GDKanalyticallead(BAT *r, BAT *b, BAT *p, BUN lead, const void* restrict default_value, int tpe); + +gdk_export gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const void* restrict bound, + int tp1, int tp2, int unit, bool preceding, lng first_half); + +gdk_export gdk_return GDKanalyticalfirst(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_export gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, BAT *l, const void* restrict bound, int tp1, int tp2); +gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *b, BAT *s, BAT *e, const bit* restrict ignore_nils, int tpe); +gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *b, BAT *s, BAT *e, int tp1, int tp2); +gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *b, BAT *s, BAT *e, int tp1, int tp2); +gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); + +#endif //_GDK_ANALYTIC_H_ diff --git a/gdk/gdk_analytic_bounds.c b/gdk/gdk_analytic_bounds.c new file mode 100644 --- /dev/null +++ b/gdk/gdk_analytic_bounds.c @@ -0,0 +1,833 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + */ + +#include "monetdb_config.h" +#include "gdk.h" +#include "gdk_analytic.h" +#include "gdk_calc_private.h" + +#define ANALYTICAL_WINDOW_BOUNDS_ROWS_PRECEDING(LIMIT) \ + do { \ + lng calc1, calc2; \ + j = k; \ + for(; k<i; k++, rb++) { \ + lng rlimit = (lng) LIMIT; \ + SUB_WITH_CHECK(k, rlimit, lng, calc1, GDK_lng_max, goto calc_overflow); \ + ADD_WITH_CHECK(calc1, !first_half, lng, calc2, GDK_lng_max, goto calc_overflow); \ + *rb = MAX(calc2, j); \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_ROWS_FOLLOWING(LIMIT) \ + do { \ + lng calc1, calc2; \ + for(; k<i; k++, rb++) { \ + lng rlimit = (lng) LIMIT; \ + ADD_WITH_CHECK(rlimit, k, lng, calc1, GDK_lng_max, goto calc_overflow); \ + ADD_WITH_CHECK(calc1, !first_half, lng, calc2, GDK_lng_max, goto calc_overflow); \ + *rb = MIN(calc2, i); \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_PRECEDING(TPE1, LIMIT, TPE2) \ + do { \ + lng m = k - 1; \ + TPE1 v, calc; \ + TPE2 rlimit; \ + for(; k<i; k++, rb++) { \ + rlimit = (TPE2) LIMIT; \ + v = bp[k]; \ + if(is_##TPE1##_nil(v)) { \ + for(j=k; ; j--) { \ + if(j == m) \ + break; \ + if(!is_##TPE1##_nil(bp[j])) \ + break; \ + } \ + } else { \ + for(j=k; ; j--) { \ + if(j == m) \ + break; \ + if(is_##TPE1##_nil(bp[j])) \ + break; \ + SUB_WITH_CHECK(v, bp[j], TPE1, calc, GDK_##TPE1##_max, goto calc_overflow); \ + if ((TPE2)(ABSOLUTE(calc)) > rlimit) \ + break; \ + } \ + } \ + j++; \ + *rb = j; \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_FOLLOWING(TPE1, LIMIT, TPE2) \ + do { \ + TPE1 v, calc; \ + TPE2 rlimit; \ + for(; k<i; k++, rb++) { \ + rlimit = (TPE2) LIMIT; \ + v = bp[k]; \ + if(is_##TPE1##_nil(v)) { \ + for(j=k+1; j<i; j++) { \ + if(!is_##TPE1##_nil(bp[j])) \ + break; \ + } \ + } else { \ + for(j=k+1; j<i; j++) { \ + if(is_##TPE1##_nil(bp[j])) \ + break; \ + SUB_WITH_CHECK(v, bp[j], TPE1, calc, GDK_##TPE1##_max, goto calc_overflow); \ + if ((TPE2)(ABSOLUTE(calc)) > rlimit) \ + break; \ + } \ + } \ + *rb = j; \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_PRECEDING(TPE1, LIMIT, TPE2) \ + do { \ + lng m = k - 1; \ + for(; k<i; k++, rb++) { \ + TPE2 rlimit = (TPE2) LIMIT; \ + TPE1 v = bp[k]; \ + if(is_##TPE1##_nil(v)) { \ + for(j=k; ; j--) { \ + if(j == m) \ + break; \ + if(!is_##TPE1##_nil(bp[j])) \ + break; \ + } \ + } else { \ + for(j=k; ; j--) { \ + if(j == m) \ + break; \ + if(is_##TPE1##_nil(bp[j])) \ + break; \ + if(v != bp[j]) { \ + if(rlimit == 0) \ + break; \ + rlimit--; \ + v = bp[j]; \ + } \ + } \ + } \ + j++; \ + *rb = j; \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE1, LIMIT, TPE2) \ + do { \ + for(; k<i; k++, rb++) { \ + TPE2 rlimit = (TPE2) LIMIT; \ + TPE1 v = bp[k]; \ + if(is_##TPE1##_nil(v)) { \ + for(j=k+1; j<i; j++) { \ + if(!is_##TPE1##_nil(bp[j])) \ + break; \ + } \ + } else { \ + for(j=k+1; j<i; j++) { \ + if(is_##TPE1##_nil(bp[j])) \ + break; \ + if(v != bp[j]) { \ + if(rlimit == 0) \ + break; \ + rlimit--; \ + v = bp[j]; \ + } \ + } \ + } \ + *rb = j; \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(TPE1, IMP, LIMIT, TPE2) \ + do { \ + TPE1 *restrict bp = (TPE1*)Tloc(b, 0); \ + if(np) { \ + nend += cnt; \ + for(; np<nend; np++) { \ + if (*np) { \ + i += (np - pnp); \ + IMP(TPE1, LIMIT, TPE2); \ + pnp = np; \ + } \ + } \ + i += (np - pnp); \ + IMP(TPE1, LIMIT, TPE2); \ + } else { \ + i += (lng) cnt; \ + IMP(TPE1, LIMIT, TPE2); \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_PRECEDING(LIMIT) \ + do { \ + lng m = k - 1; \ + for(; k<i; k++, rb++) { \ + void *v = BUNtail(bpi, (BUN) k); \ + if(atomcmp(v, nil) == 0) { \ + for(j=k; ; j--) { \ + if(j == m) \ + break; \ + if(atomcmp(BUNtail(bpi, (BUN) j), nil) != 0) \ + break; \ + } \ + } else { \ + for(j=k; ; j--) { \ + void *next; \ + if(j == m) \ + break; \ + next = BUNtail(bpi, (BUN) j); \ + if(atomcmp(next, nil) == 0) \ + break; \ + if(ABSOLUTE(atomcmp(v, next)) > (int) LIMIT) \ + break; \ + } \ + } \ + j++; \ + *rb = j; \ + } \ + } while(0) + +#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_FOLLOWING(LIMIT) \ + do { \ + for(; k<i; k++, rb++) { \ + void *v = BUNtail(bpi, (BUN) k); \ + if(atomcmp(v, nil) == 0) { \ + for(j=k+1; j<i; j++) { \ + if(atomcmp(BUNtail(bpi, (BUN) j), nil) != 0) \ + break; \ + } \ + } else { \ + for(j=k+1; j<i; j++) { \ + void *next = BUNtail(bpi, (BUN) j); \ + if(atomcmp(next, nil) == 0) \ + break; \ + if(ABSOLUTE(atomcmp(v, next)) > (int) LIMIT) \ + break; \ + } \ + } \ + *rb = j; \ + } \ + } while(0) + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list