Changeset: bbf76460ea5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bbf76460ea5d
Modified Files:
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/rel_bin.c
testing/listexports.py.in
Branch: default
Log Message:
Merge with Oct2020 branch.
diffs (156 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2519,6 +2519,8 @@ rel2bin_antijoin(backend *be, sql_rel *r
return stmt_list(be, l);
}
+#define complex_join_expression(e) (exp_has_func(e) && (e)->flag !=
cmp_filter) || (e)->flag == cmp_or || ((e)->f && (e)->anti)
+
static stmt *
rel2bin_semijoin(backend *be, sql_rel *rel, list *refs)
{
@@ -2563,10 +2565,8 @@ rel2bin_semijoin(backend *be, sql_rel *r
int idx = 0, equality_only = 1;
jexps = get_equi_joins_first(sql, jexps,
&equality_only);
- if (!equality_only || list_length(jexps) > 1) {
+ if (!equality_only || list_length(jexps) > 1 ||
complex_join_expression((sql_exp*)jexps->h->data))
left = subrel_project(be, left, refs, rel->l);
- equality_only = 0;
- }
right = subrel_project(be, right, refs, rel->r);
for( en = jexps->h; en; en = en->next ) {
@@ -2575,8 +2575,7 @@ rel2bin_semijoin(backend *be, sql_rel *r
stmt *s = NULL;
/* only handle simple joins here */
- if ((exp_has_func(e) && e->flag != cmp_filter)
||
- e->flag == cmp_or || (e->f && e->anti))
{
+ if (complex_join_expression(e)) {
if (!join && !list_length(lje)) {
stmt *l = bin_first_column(be,
left);
stmt *r = bin_first_column(be,
right);
diff --git a/sql/test/bugs/Tests/rtrim_bug.stable.out
b/sql/test/bugs/Tests/rtrim_bug.stable.out
--- a/sql/test/bugs/Tests/rtrim_bug.stable.out
+++ b/sql/test/bugs/Tests/rtrim_bug.stable.out
@@ -47,7 +47,7 @@ stdout of test 'rtrim_bug` in directory
% sys., sys. # table_name
% data_length, data_value # name
% int, varchar # type
-% 1, 1 # length
+% 1, 0 # length
#DROP VIEW v1;
#DROP VIEW v2;
#DROP TABLE t1;
diff --git a/testing/exportutils.py b/testing/exportutils.py
--- a/testing/exportutils.py
+++ b/testing/exportutils.py
@@ -17,7 +17,7 @@ inclre = re.compile(r'\s*#\s*include\s+"
# comments (/* ... */ where ... is as short as possible)
cmtre = re.compile(r'/\*[^*]*(\*(?=[^/])[^*]*)*\*/|//.*')
# horizontal white space
-spcre = re.compile(r'[ \t]+')
+horspcre = re.compile(r'[ \t]+')
# identifier
identre = re.compile(r'\b(?P<ident>[a-zA-Z_]\w*)\b')
# undef
@@ -79,12 +79,12 @@ def process(line, funmac, macros, infunm
nline += line[pos:]
return nline
-def readfile(f, funmac=None, macros=None, files=None, printdef=False):
+def readfile(f, funmac=None, macros=None, files=None, printdef=False,
include=False):
data = open(f).read()
dirname, f = os.path.split(f)
data = cmtre.sub(' ', data)
data = data.replace('\\\n', '')
- data = spcre.sub(' ', data)
+ data = horspcre.sub(' ', data)
data = data.splitlines()
if funmac is None:
funmac = {}
@@ -110,7 +110,7 @@ def readfile(f, funmac=None, macros=None
if elifre.match(line) or elsere.match(line):
if printdef:
ndata.append(line)
- if skip:
+ if include and skip:
skip[-1] = True
continue
if skip and skip[-1]:
@@ -130,13 +130,14 @@ def readfile(f, funmac=None, macros=None
args = () # empty argument list
funmac[name] = (args, repl)
continue
- macros[name] = repl
+ if include:
+ macros[name] = repl
continue
res = inclre.match(line)
if res is not None:
fn = res.group('file')
- if '/' not in fn and os.path.exists(os.path.join(dirname, fn)) and
fn not in files:
- incdata = readfile(os.path.join(dirname, fn), funmac, macros,
files, printdef)
+ if include and '/' not in fn and
os.path.exists(os.path.join(dirname, fn)) and fn not in files:
+ incdata = readfile(os.path.join(dirname, fn), funmac, macros,
files, printdef, include)
ndata.extend(incdata)
continue
ndata.append(line)
@@ -154,8 +155,13 @@ def readfile(f, funmac=None, macros=None
files.remove(f)
return ndata
-def preprocess(f, printdef=False):
- return '\n'.join(readfile(f, printdef=printdef))
+def preprocess(f, printdef=False, include=True):
+ return '\n'.join(readfile(f, printdef=printdef, include=include))
+
+# some regexps helping to normalize a declaration
+spcre = re.compile(r'\s+')
+strre = re.compile(r'([^ *])\*')
+comre = re.compile(r',\s*')
def normalize(decl):
decl = spcre.sub(' ', decl) \
@@ -175,4 +181,4 @@ def normalize(decl):
if __name__ == '__main__':
import sys
for f in sys.argv[1:]:
- print(preprocess(f, printdef=True))
+ print(preprocess(f, printdef=False))
diff --git a/testing/listexports.py.in b/testing/listexports.py.in
--- a/testing/listexports.py.in
+++ b/testing/listexports.py.in
@@ -38,7 +38,7 @@ nmere = re.compile(r'\b(?P<name>[a-zA-Z_
def extract(f):
decls = []
- data = exportutils.preprocess(f)
+ data = exportutils.preprocess(f, include=False)
res = expre.search(data)
while res is not None:
@@ -81,8 +81,7 @@ def findfiles(dirlist, skipfiles = [], s
decls.extend(extract(os.path.join(root, f)))
done[f] = True
decls.sort()
- names, decls = list(zip(*decls))
- return decls
+ return [decl for name, decl in decls]
def listexports():
output = []
diff --git a/testing/melcheck.py b/testing/melcheck.py
--- a/testing/melcheck.py
+++ b/testing/melcheck.py
@@ -76,7 +76,7 @@ def checkcommand(imp, mod, fcn, decl, re
cpos = cres.end(0)
def process1(f):
- data = exportutils.preprocess(f)
+ data = exportutils.preprocess(f, include=True)
pats = {}
cmds = {}
res = fcnre.search(data)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list