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