Changeset: 64ba0a8ac9f8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64ba0a8ac9f8
Added Files:
        buildtools/scripts/mal2h.py
        buildtools/scripts/sql2h.py
        monetdb5/embedded/CMakeLists.txt
        monetdb5/embedded/mal_embedded.c
        monetdb5/embedded/mal_embedded.h
        sql/backends/monet5/Tests/crash.Bug-3609.sql
        sql/backends/monet5/Tests/crash.Bug-3609.stable.err
        sql/backends/monet5/Tests/crash.Bug-3609.stable.out
        sql/backends/monet5/Tests/generator00.sql
        sql/backends/monet5/Tests/generator00.stable.err
        sql/backends/monet5/Tests/generator00.stable.out
        sql/backends/monet5/Tests/generator01.sql
        sql/backends/monet5/Tests/generator01.stable.err
        sql/backends/monet5/Tests/generator01.stable.out
        sql/backends/monet5/Tests/generator02.sql
        sql/backends/monet5/Tests/generator02.stable.err
        sql/backends/monet5/Tests/generator02.stable.out
        sql/backends/monet5/Tests/generator03.sql
        sql/backends/monet5/Tests/generator03.stable.err
        sql/backends/monet5/Tests/generator03.stable.out
        sql/backends/monet5/Tests/generator04.sql
        sql/backends/monet5/Tests/generator04.stable.err
        sql/backends/monet5/Tests/generator04.stable.out
        sql/backends/monet5/Tests/joins00.sql
        sql/backends/monet5/Tests/joins00.stable.err
        sql/backends/monet5/Tests/joins00.stable.out
        sql/backends/monet5/Tests/joins01.sql
        sql/backends/monet5/Tests/joins01.stable.err
        sql/backends/monet5/Tests/joins01.stable.out
        sql/backends/monet5/Tests/joins02.sql
        sql/backends/monet5/Tests/joins02.stable.err
        sql/backends/monet5/Tests/joins02.stable.out
        sql/backends/monet5/Tests/rangejoin.sql
        sql/backends/monet5/Tests/rangejoin.stable.err
        sql/backends/monet5/Tests/rangejoin.stable.out
        sql/backends/monet5/Tests/thetaselect00.sql
        sql/backends/monet5/Tests/thetaselect00.stable.err
        sql/backends/monet5/Tests/thetaselect00.stable.out
        sql/backends/monet5/sql_generator.c
        sql/backends/monet5/sql_generator.h
        sql/backends/monet5/sql_generator.mal
        sql/backends/monet5/sql_generator_hge.mal
        sql/scripts/70_storagemodel.sql
        sql/scripts/71_statistics.sql
        sql/scripts/90_generator.sql
        sql/scripts/90_generator_hge.sql
        sql/scripts/sql_scripts.c
        sql/scripts/sql_scripts.h
        sql/test/generator/Tests/All
        sql/test/generator/Tests/crash.Bug-3609.sql
        sql/test/generator/Tests/crash.Bug-3609.stable.err
        sql/test/generator/Tests/crash.Bug-3609.stable.out
        sql/test/generator/Tests/generator00.sql
        sql/test/generator/Tests/generator00.stable.err
        sql/test/generator/Tests/generator00.stable.out
        sql/test/generator/Tests/generator01.sql
        sql/test/generator/Tests/generator01.stable.err
        sql/test/generator/Tests/generator01.stable.out
        sql/test/generator/Tests/generator02.sql
        sql/test/generator/Tests/generator02.stable.err
        sql/test/generator/Tests/generator02.stable.out
        sql/test/generator/Tests/generator03.sql
        sql/test/generator/Tests/generator03.stable.err
        sql/test/generator/Tests/generator03.stable.out
        sql/test/generator/Tests/generator04.sql
        sql/test/generator/Tests/generator04.stable.err
        sql/test/generator/Tests/generator04.stable.out
        sql/test/generator/Tests/joins00.sql
        sql/test/generator/Tests/joins00.stable.err
        sql/test/generator/Tests/joins00.stable.out
        sql/test/generator/Tests/joins01.sql
        sql/test/generator/Tests/joins01.stable.err
        sql/test/generator/Tests/joins01.stable.out
        sql/test/generator/Tests/joins02.sql
        sql/test/generator/Tests/joins02.stable.err
        sql/test/generator/Tests/joins02.stable.out
        sql/test/generator/Tests/rangejoin.sql
        sql/test/generator/Tests/rangejoin.stable.err
        sql/test/generator/Tests/rangejoin.stable.out
        sql/test/generator/Tests/thetaselect00.sql
        sql/test/generator/Tests/thetaselect00.stable.err
        sql/test/generator/Tests/thetaselect00.stable.out
Removed Files:
        sql/backends/monet5/41_sql_hge.mal
        sql/backends/monet5/generator/90_generator.mal
        sql/backends/monet5/generator/90_generator.sql
        sql/backends/monet5/generator/90_generator_hge.mal
        sql/backends/monet5/generator/90_generator_hge.sql
        sql/backends/monet5/generator/CMakeLists.txt
        sql/backends/monet5/generator/Makefile.ag
        sql/backends/monet5/generator/Tests/All
        sql/backends/monet5/generator/Tests/crash.Bug-3609.sql
        sql/backends/monet5/generator/Tests/crash.Bug-3609.stable.err
        sql/backends/monet5/generator/Tests/crash.Bug-3609.stable.out
        sql/backends/monet5/generator/Tests/generator00.sql
        sql/backends/monet5/generator/Tests/generator00.stable.err
        sql/backends/monet5/generator/Tests/generator00.stable.out
        sql/backends/monet5/generator/Tests/generator01.sql
        sql/backends/monet5/generator/Tests/generator01.stable.err
        sql/backends/monet5/generator/Tests/generator01.stable.out
        sql/backends/monet5/generator/Tests/generator02.sql
        sql/backends/monet5/generator/Tests/generator02.stable.err
        sql/backends/monet5/generator/Tests/generator02.stable.out
        sql/backends/monet5/generator/Tests/generator03.sql
        sql/backends/monet5/generator/Tests/generator03.stable.err
        sql/backends/monet5/generator/Tests/generator03.stable.out
        sql/backends/monet5/generator/Tests/generator04.sql
        sql/backends/monet5/generator/Tests/generator04.stable.err
        sql/backends/monet5/generator/Tests/generator04.stable.out
        sql/backends/monet5/generator/Tests/joins00.sql
        sql/backends/monet5/generator/Tests/joins00.stable.err
        sql/backends/monet5/generator/Tests/joins00.stable.out
        sql/backends/monet5/generator/Tests/joins01.sql
        sql/backends/monet5/generator/Tests/joins01.stable.err
        sql/backends/monet5/generator/Tests/joins01.stable.out
        sql/backends/monet5/generator/Tests/joins02.sql
        sql/backends/monet5/generator/Tests/joins02.stable.err
        sql/backends/monet5/generator/Tests/joins02.stable.out
        sql/backends/monet5/generator/Tests/rangejoin.sql
        sql/backends/monet5/generator/Tests/rangejoin.stable.err
        sql/backends/monet5/generator/Tests/rangejoin.stable.out
        sql/backends/monet5/generator/Tests/thetaselect00.sql
        sql/backends/monet5/generator/Tests/thetaselect00.stable.err
        sql/backends/monet5/generator/Tests/thetaselect00.stable.out
        sql/backends/monet5/generator/generator.c
        sql/backends/monet5/generator/generator.h
        sql/backends/monet5/generator/generator.mal
        sql/backends/monet5/generator/generator_hge.mal
        sql/backends/monet5/sql_hge.mal
        sql/scripts/75_storagemodel.sql
        sql/scripts/80_statistics.sql
Modified Files:
        CMakeLists.txt
        clients/Tests/exports.stable.out
        clients/mapiclient/dump.c
        clients/mapiclient/eventparser.h
        clients/mapiclient/mclient.c
        clients/mapiclient/msqldump.c
        clients/mapiclient/prompt.c
        clients/mapilib/CMakeLists.txt
        clients/mapilib/Makefile.ag
        clients/mapilib/mapi.c
        clients/odbc/setup/drvcfg.h
        common/CMakeLists.txt
        common/Makefile.ag
        common/options/CMakeLists.txt
        common/options/Makefile.ag
        common/options/getopt.c
        common/options/getopt1.c
        common/options/monet_options.c
        common/stream/stream.c
        common/stream/stream.h
        common/utils/mcrypt.c
        common/utils/msabaoth.c
        common/utils/mutils.c
        common/utils/mutils.h
        common/utils/muuid.c
        configure.ag
        gdk/gdk.h
        gdk/gdk_aggr.c
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_cross.c
        gdk/gdk_delta.c
        gdk/gdk_delta.h
        gdk/gdk_group.c
        gdk/gdk_hash.c
        gdk/gdk_heap.c
        gdk/gdk_imprints.c
        gdk/gdk_interprocess.c
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_orderidx.c
        gdk/gdk_posix.c
        gdk/gdk_private.h
        gdk/gdk_project.c
        gdk/gdk_sample.c
        gdk/gdk_select.c
        gdk/gdk_storage.c
        gdk/gdk_string.c
        gdk/gdk_system.c
        gdk/gdk_system.h
        gdk/gdk_tm.c
        gdk/gdk_unique.c
        gdk/gdk_utils.c
        gdk/gdk_utils.h
        geom/monetdb5/Makefile.ag
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
        geom/monetdb5/libgeom.c
        geom/sql/40_geom.sql
        geom/sql/Makefile.ag
        monetdb5/CMakeLists.txt
        monetdb5/Makefile.ag
        monetdb5/extras/mal_optimizer_template/opt_sql_append.mal
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/Makefile.ag
        monetdb5/mal/mal.c
        monetdb5/mal/mal.h
        monetdb5/mal/mal_atom.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_client.h
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_exception.c
        monetdb5/mal/mal_factory.c
        monetdb5/mal/mal_function.c
        monetdb5/mal/mal_function.h
        monetdb5/mal/mal_import.c
        monetdb5/mal/mal_import.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_interpreter.h
        monetdb5/mal/mal_linker.c
        monetdb5/mal/mal_linker.h
        monetdb5/mal/mal_listing.c
        monetdb5/mal/mal_listing.h
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_namespace.c
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_private.h
        monetdb5/mal/mal_resolve.c
        monetdb5/mal/mal_resource.c
        monetdb5/mal/mal_runtime.c
        monetdb5/mal/mal_runtime.h
        monetdb5/mal/mal_scenario.c
        monetdb5/mal/mal_scenario.h
        monetdb5/mal/mal_session.c
        monetdb5/mal/mal_session.h
        monetdb5/modules/Makefile.ag
        monetdb5/modules/atoms/CMakeLists.txt
        monetdb5/modules/atoms/Makefile.ag
        monetdb5/modules/atoms/inet.c
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/uuid.c
        monetdb5/modules/kernel/CMakeLists.txt
        monetdb5/modules/kernel/Makefile.ag
        monetdb5/modules/kernel/alarm.mal
        monetdb5/modules/kernel/microbenchmark.c
        monetdb5/modules/mal/CMakeLists.txt
        monetdb5/modules/mal/Makefile.ag
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/groupby.c
        monetdb5/modules/mal/iterator.c
        monetdb5/modules/mal/mal_init.mal
        monetdb5/modules/mal/mal_mapi.c
        monetdb5/modules/mal/manifold.c
        monetdb5/modules/mal/mdb.c
        monetdb5/modules/mal/oltp.c
        monetdb5/modules/mal/orderidx.c
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/remote.c
        monetdb5/modules/mal/remote.h
        monetdb5/modules/mal/tokenizer.c
        monetdb5/optimizer/CMakeLists.txt
        monetdb5/optimizer/Makefile.ag
        monetdb5/optimizer/opt_coercion.c
        monetdb5/optimizer/opt_commonTerms.c
        monetdb5/optimizer/opt_constants.c
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_emptybind.c
        monetdb5/optimizer/opt_evaluate.c
        monetdb5/optimizer/opt_garbageCollector.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_inline.c
        monetdb5/optimizer/opt_jit.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_oltp.c
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_projectionpath.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/opt_remoteQueries.c
        monetdb5/optimizer/opt_reorder.c
        monetdb5/optimizer/opt_support.c
        monetdb5/optimizer/opt_wrapper.c
        monetdb5/optimizer/optimizer.c
        monetdb5/optimizer/optimizer_private.h
        monetdb5/scheduler/CMakeLists.txt
        monetdb5/scheduler/Makefile.ag
        monetdb5/scheduler/run_memo.c
        monetdb5/scheduler/run_pipeline.c
        sql/Makefile.ag
        sql/backends/monet5/40_sql.mal
        sql/backends/monet5/CMakeLists.txt
        sql/backends/monet5/Makefile.ag
        sql/backends/monet5/Tests/All
        sql/backends/monet5/UDF/capi/Makefile.ag
        sql/backends/monet5/UDF/capi/capi.c
        sql/backends/monet5/UDF/pyapi/Makefile.ag
        sql/backends/monet5/UDF/pyapi/pyapi.c
        sql/backends/monet5/UDF/pyapi3/Makefile.ag
        sql/backends/monet5/UDF/udf/80_udf.mal
        sql/backends/monet5/UDF/udf/80_udf.sql
        sql/backends/monet5/UDF/udf/80_udf_hge.mal
        sql/backends/monet5/UDF/udf/80_udf_hge.sql
        sql/backends/monet5/UDF/udf/Makefile.ag
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_inspect.mal
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_orderidx.c
        sql/backends/monet5/sql_rank.mal
        sql/backends/monet5/sql_rank_hge.mal
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_scenario.h
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statistics.c
        sql/backends/monet5/sql_transaction.c
        sql/backends/monet5/sql_upgrades.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/vaults/bam/85_bam.sql
        sql/backends/monet5/vaults/bam/Makefile.ag
        sql/backends/monet5/vaults/fits/72_fits.mal
        sql/backends/monet5/vaults/fits/72_fits.sql
        sql/backends/monet5/vaults/fits/Makefile.ag
        sql/backends/monet5/vaults/fits/fits.c
        sql/backends/monet5/vaults/lidar/75_lidar.sql
        sql/backends/monet5/vaults/lidar/Makefile.ag
        sql/backends/monet5/vaults/lidar/lidar.c
        sql/backends/monet5/vaults/netcdf/74_netcdf.sql
        sql/backends/monet5/vaults/netcdf/Makefile.ag
        sql/backends/monet5/vaults/netcdf/netcdf.c
        sql/backends/monet5/vaults/shp/75_shp.mal
        sql/backends/monet5/vaults/shp/75_shp.sql
        sql/backends/monet5/vaults/shp/Makefile.ag
        sql/backends/monet5/vaults/shp/shp.c
        sql/backends/monet5/wlr.c
        sql/benchmarks/hist-uva/ground/main.c
        sql/benchmarks/xmark/unix.c
        sql/common/sql_list.c
        sql/include/sql_mem.h
        sql/scripts/99_system.sql
        sql/scripts/CMakeLists.txt
        sql/scripts/Makefile.ag
        sql/server/rel_optimizer.c
        sql/server/rel_planner.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_semantic.c
        sql/server/sql_atom.c
        sql/server/sql_mvc.c
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_scan.c
        sql/server/sql_semantic.c
        sql/server/sql_symbol.c
        sql/storage/bat/Makefile.ag
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/Tests/keys.stable.out
        sql/test/remote/Tests/creds.SQL.py
        sql/test/remote/Tests/different_user.SQL.py
        sql/test/remote/Tests/invalid_creds.SQL.py
        sql/test/sys-schema/Tests/systemfunctions.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
        tools/Makefile.ag
        tools/merovingian/client/monetdb.c
        tools/merovingian/daemon/argvcmds.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/discoveryrunner.c
        tools/merovingian/daemon/forkmserver.c
        tools/merovingian/daemon/handlers.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/multiplex-funnel.c
        tools/merovingian/utils/control.c
        tools/merovingian/utils/database.c
        tools/merovingian/utils/utils.c
        tools/mserver/CMakeLists.txt
        tools/mserver/Makefile.ag
        tools/mserver/monet_version.c.in
        tools/mserver/mserver5.c
        tools/mserver/shutdowntest.c
        vertoo.config
Branch: cmake-monetdblite
Log Message:

Merge with translate-scripts. Had to move embedded scripts initialization so 
the MAL and SQL layers continue "clean" from each other.

Removed malBootstrap, mal_init, mserver_reset mal_exit functions, now replaced 
by mal_embedded functions: malEmbeddedBoot, malEmbeddedReset and 
malEmbeddedStop. SQL initialization scripts (MAL modules and SQL scripts) are 
done in the prelude function.


diffs (truncated from 19329 to 300 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -67,7 +67,7 @@ if(NOT MSVC AND NOT ${CMAKE_C_COMPILER_I
 endif()
 if(NOT CMAKE_BUILD_TYPE) # Set default build options
        message(STATUS "Setting build type to Debug as none was selected")
-       set(CMAKE_BUILD_TYPE Debug CACHE STRING "The type of build")
+       set(CMAKE_BUILD_TYPE Debug CACHE STRING "The type of build" FORCE)
 endif()
 
 # Extensions to use (please add to the OPTIONS_LIST bellow whenever a new 
option is added)
@@ -100,7 +100,7 @@ set(WITH_LIBXML2 "AUTO" CACHE STRING "In
 set(WITH_LZ4 "AUTO" CACHE STRING "Include lz4 library support (default=AUTO)") 
# Check with HAVE_LIBLZ4
 set(WITH_PROJ "AUTO" CACHE STRING "Include proj support (default=AUTO)") # 
Check with HAVE_PROJ
 set(WITH_READLINE "AUTO" CACHE STRING "Include readline support 
(default=AUTO)") # Check with HAVE_LIBREADLINE
-set(WITH_REGEX "AUTO" CACHE STRING "Use either PCRE or POSIX regular 
expressions (default=AUTO)") # Check with HAVE_LIBPCRE and HAVE_POSIX_REGEX
+set(WITH_REGEX "AUTO" CACHE STRING "Use either PCRE or POSIX regular 
expressions (default=AUTO)") # Check with HAVE_LIBPCRE and HAVE_LIBGNUREGEX
 set(WITH_SNAPPY "AUTO" CACHE STRING "Include snappy support (default=AUTO)") # 
Check with HAVE_LIBSNAPPY
 set(WITH_UUID "AUTO" CACHE STRING "Include UUID support (default=AUTO)") # 
Check with HAVE_UUID
 set(WITH_VALGRIND "NO" CACHE STRING "Include valgrind support (default=NO)") # 
Check with HAVE_VALGRIND
@@ -459,9 +459,9 @@ endif()
 if(NOT HAVE_LIBPCRE)
        set(PCRE_INCLUDE_DIR "" CACHE INTERNAL "pcre include directory" FORCE)
        set(PCRE_LIBRARIES "" CACHE INTERNAL "pcre libraries to link" FORCE)
-       check_symbol_exists("regcomp" "regex.h" HAVE_POSIX_REGEX)
+       check_symbol_exists("regcomp" "regex.h" HAVE_LIBGNUREGEX)
 endif()
-if(NOT HAVE_LIBPCRE AND NOT HAVE_POSIX_REGEX)
+if(NOT HAVE_LIBPCRE AND NOT HAVE_LIBGNUREGEX)
        if(${ENABLE_MONETDB5} STREQUAL "YES")
                message(FATAL_ERROR "PCRE library or GNU regex library not 
found but required for MonetDB5")
        else()
diff --git a/buildtools/scripts/mal2h.py b/buildtools/scripts/mal2h.py
new file mode 100644
--- /dev/null
+++ b/buildtools/scripts/mal2h.py
@@ -0,0 +1,213 @@
+# 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 - 2019 MonetDB B.V.
+
+from __future__ import print_function
+
+import os
+import argparse
+
+
+parser = argparse.ArgumentParser(description='Convert MonetDB MAL scripts to C 
header files to be inlined')
+parser.add_argument('file', metavar='F', type=str, help='The MAL file to 
convert')
+parser.add_argument('-t', '--trim', dest='trim', action='store_true', 
help='trim whitespaces')
+parser.add_argument('-r', '--rcomments', dest='rcom', action='store_true', 
help='remove comments')
+
+# check arguments and veracity of the input file first
+args = parser.parse_args()
+
+if not os.path.exists(args.file):
+    raise Exception("File {0} doesn't exist".format(args.file))
+if not os.path.isfile(args.file):
+    raise Exception("{0} is not a file".format(args.file))
+
+file_stat = os.stat(args.file)
+if file_stat.st_size > (1 << 29):
+    raise Exception("File {0} is too large to process".format(args.file))
+
+# get the file name and extension
+base = os.path.basename(args.file)
+split = os.path.splitext(base)
+if len(split) < 2 or split[1] != '.mal':
+    raise Exception("Only .mal files are supported")
+
+filebasename = split[0]
+# output file will be written on the same directory
+mal_h_output_file = open(os.path.join(os.path.dirname(args.file), 
filebasename) + split[1] + ".h", 'w')
+
+mal_content_file = open(args.file, 'r')
+mal_content = mal_content_file.read()
+mal_content_file.close()
+
+# write the common header, plus the C array entry
+insert1 = (
+'/*\n'
+'* This Source Code Form is subject to the terms of the Mozilla Public\n'
+'* License, v. 2.0.  If a copy of the MPL was not distributed with this\n'
+'* file, You can obtain one at http://mozilla.org/MPL/2.0/.\n'
+'*\n'
+'* Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.\n'
+'*/\n'
+'\n'
+'// This file was generated automatically with mal2h.py. Do not edit this file 
directly.\n'
+'{{ "{0}", "').format(filebasename)
+
+mal_h_output_file.write(insert1)
+
+# Let's remove comments from the mal script with a Markov chain :) Bugs might 
still be there
+# STATES 0 - OK, 1 in # comment, 2 between comment keyword and comment block 
(removing comments),
+# 3 inside address comment block (removing comments),
+# 4 between comment keyword and comment block (not removing comments),
+# 5 inside address comment block (not removing comments), 6 inside " string, 7 
inside whitespaces
+CACHE_SIZE = file_stat.st_blksize  # we will set the cache size to the 
filesystem blocksize
+
+buffer = ['\0'] * CACHE_SIZE
+cur_state = 0
+current_pointer = 0
+i = 0
+endloop = len(mal_content) - 1
+
+
+def write_to_buffer(input_c):
+    global current_pointer, mal_h_output_file, buffer
+    if current_pointer == CACHE_SIZE:
+        mal_h_output_file.write("".join(buffer))
+        current_pointer = 0
+    buffer[current_pointer] = input_c
+    current_pointer += 1
+
+
+while i < endloop:
+    c = mal_content[i]
+
+    if cur_state == 1:  # inside an hashtag comment
+        if c == '\n':
+            cur_state = 0
+        i += 1
+        continue
+    elif cur_state == 2:  # before entering a MAL comment, and removing it
+        if c == '"':
+            cur_state = 3
+        i += 1
+        continue
+    elif cur_state == 3:  # inside a MAL comment, and removing it
+        if c == '\\':
+            i += 2
+        elif c == '"':
+            cur_state = 0
+            i += 1
+        else:
+            i += 1
+        continue
+    elif cur_state == 4:  # before entering a MAL comment, but not removing it
+        if c == '"':
+            write_to_buffer('\\')
+            write_to_buffer('"')
+            cur_state = 5
+        i += 1
+        continue
+    elif cur_state == 5:  # inside a MAL comment, but not removing it
+        if c == '\\' and i + 1 < endloop:
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer(mal_content[i + 1])
+            i += 2
+        elif c == '\n':
+            write_to_buffer('\\')
+            write_to_buffer('n')
+            i += 1
+        elif c == '\t':
+            write_to_buffer('\\')
+            write_to_buffer('t')
+            i += 1
+        else:
+            if c == '"':
+                write_to_buffer('\\')
+                write_to_buffer('\"')
+                cur_state = 0
+            else:
+                write_to_buffer(c)
+            i += 1
+        continue
+    elif cur_state == 6:  # inside a string
+        if c == '\\' and i + 1 < endloop:
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer('\\')
+            write_to_buffer(mal_content[i + 1])
+            i += 2
+        elif c == '\n':
+            write_to_buffer('\\')
+            write_to_buffer('n')
+            i += 1
+        elif c == '\t':
+            write_to_buffer('\\')
+            write_to_buffer('t')
+            i += 1
+        else:
+            if c == '"':
+                cur_state = 0
+                write_to_buffer('\\')
+            write_to_buffer(c)
+            i += 1
+        continue
+    elif cur_state == 7:  # inside whitespaces
+        if c not in (' ', '\t', '\n'):
+            cur_state = 0
+            continue
+        i += 1
+        continue
+
+    if c == '#':
+        cur_state = 1
+        i += 1
+        continue
+    elif c == 'c':
+        if i + 8 < endloop and mal_content[i:i+8] == 'comment ':
+            if args.rcom:
+                cur_state = 2
+            else:
+                for mchar in 'comment ':
+                    write_to_buffer(mchar)
+                cur_state = 4
+            i += 7
+        else:
+            write_to_buffer('c')
+            i += 1
+        continue
+    elif c == '"':
+        write_to_buffer('\\')
+        write_to_buffer(c)
+        cur_state = 6
+        i += 1
+        continue
+    elif c in (' ', '\t', '\n'):
+        if c == '\n':
+            write_to_buffer('\\')
+            write_to_buffer('n')
+        elif c == '\t':
+            write_to_buffer('\\')
+            write_to_buffer('t')
+        else:
+            write_to_buffer(c)
+        if args.trim:
+            cur_state = 7
+        i += 1
+        continue
+
+    if c == '\\':
+        write_to_buffer('\\')
+    write_to_buffer(c)
+    i += 1
+
+if current_pointer > 0:
+    mal_h_output_file.write("".join(buffer[:current_pointer]))
+
+# finish C array entry
+mal_h_output_file.write('" }}, \n'.format())
+mal_h_output_file.close()
diff --git a/buildtools/scripts/sql2h.py b/buildtools/scripts/sql2h.py
new file mode 100644
--- /dev/null
+++ b/buildtools/scripts/sql2h.py
@@ -0,0 +1,195 @@
+# 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 - 2019 MonetDB B.V.
+
+from __future__ import print_function
+
+import os
+import argparse
+
+
+parser = argparse.ArgumentParser(description='Convert MonetDB SQL scripts to C 
header files to be inlined')
+parser.add_argument('file', metavar='F', type=str, help='The SQL file to 
convert')
+parser.add_argument('-t', '--trim', dest='trim', action='store_true', 
help='trim whitespaces')
+
+# check arguments and veracity of the input file first
+args = parser.parse_args()
+
+if not os.path.exists(args.file):
+    raise Exception("File {0} doesn't exist".format(args.file))
+if not os.path.isfile(args.file):
+    raise Exception("{0} is not a file".format(args.file))
+
+file_stat = os.stat(args.file)
+if file_stat.st_size > (1 << 29):
+    raise Exception("File {0} is too large to process".format(args.file))
+
+# get the file name and extension
+base = os.path.basename(args.file)
+split = os.path.splitext(base)
+if len(split) < 2 or split[1] != '.sql':
+    raise Exception("Only .sql files are supported")
+
+filebasename = split[0]
+# output file will be written on the same directory
+sql_h_output_file = open(os.path.join(os.path.dirname(args.file), 
filebasename) + split[1] + ".h", 'w')
+
+sql_content_file = open(args.file, 'r')
+sql_content = sql_content_file.read()
+sql_content_file.close()
+
+# write the common header, plus the C array entry
+insert1 = (
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to