Github user kaknikhil commented on a diff in the pull request:
https://github.com/apache/madlib/pull/271#discussion_r191603261
--- Diff: src/madpack/madpack.py ---
@@ -131,10 +141,73 @@ def _get_relative_maddir(maddir, port):
return maddir
#
------------------------------------------------------------------------------
+def _cleanup_comments_in_sqlfile(output_filename, upgrade):
+ """
+ @brief Remove comments in the sql script
+ """
+ if not upgrade:
+ with open(output_filename, 'r+') as output_filehandle:
+ full_sql = output_filehandle.read()
+ pattern =
re.compile(r"""(/\*(.|[\r\n])*?\*/)|(--(.*|[\r\n]))""")
+ res = ''
+ lines = re.split(r'[\r\n]+', full_sql)
+ for line in lines:
+ tmp = line
+ if not tmp.strip().startswith("E'"):
+ line = re.sub(pattern, '', line)
+ res += line + '\n'
+ full_sql = res.strip()
+ full_sql = re.sub(pattern, '', full_sql).strip()
+ # Re-write the cleaned-up sql to a new file. Python does not let us
+ # erase all the content of a file and rewrite the same file again.
+ cleaned_output_filename = output_filename+'.tmp'
+ with open(cleaned_output_filename, 'w') as output_filehandle:
+ _write_to_file(output_filehandle, full_sql)
+ # Move the cleaned output file to the old one.
+ os.rename(cleaned_output_filename, output_filename)
+
+def _run_m4_and_append(schema, maddir_mod_py, module, sqlfile,
+ output_filehandle, pre_sql=None):
+ """
+ Function to process a sql file with M4.
+ """
+ # Check if the SQL file exists
+ if not os.path.isfile(sqlfile):
+ error_(this, "Missing module SQL file (%s)" % sqlfile, False)
+ raise ValueError("Missing module SQL file (%s)" % sqlfile)
-def _run_sql_file(schema, maddir_mod_py, module, sqlfile,
- tmpfile, logfile, pre_sql, upgrade=False,
- sc=None):
+ # Prepare the file using M4
+ try:
+ # Add the before SQL
+ if pre_sql:
+ output_filehandle.writelines([pre_sql, '\n\n'])
+ # Find the madpack dir (platform specific or generic)
+ if os.path.isdir(maddir + "/ports/" + portid + "/" + dbver +
"/madpack"):
+ maddir_madpack = maddir + "/ports/" + portid + "/" + dbver +
"/madpack"
+ else:
+ maddir_madpack = maddir + "/madpack"
+ maddir_ext_py = maddir + "/lib/python"
+
+ m4args = ['m4',
+ '-P',
+ '-DMADLIB_SCHEMA=' + schema,
+ '-DPLPYTHON_LIBDIR=' + maddir_mod_py,
+ '-DEXT_PYTHON_LIBDIR=' + maddir_ext_py,
+ '-DMODULE_PATHNAME=' + maddir_lib,
+ '-DMODULE_NAME=' + module,
+ '-I' + maddir_madpack,
+ sqlfile]
+
+ info_(this, "> ... parsing: " + " ".join(m4args), verbose)
+ output_filehandle.flush()
+ subprocess.call(m4args, stdout=output_filehandle)
+ except:
+ error_(this, "Failed executing m4 on %s" % sqlfile, False)
+ raise Exception
+
+def _run_sql_file_install_check(schema, maddir_mod_py, module, sqlfile,
+ tmpfile, logfile, pre_sql, upgrade=False,
+ sc=None):
--- End diff --
we don't really need the two optional params since
`_run_sql_file_install_check` is only called once.
---