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

Reply via email to