Changeset: aa26087ebc8f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/aa26087ebc8f
Modified Files:
sql/server/rel_optimize_sel.c
testing/Mtest.py.in
testing/sqllogictest.py
Branch: default
Log Message:
Merge with Aug2024 branch.
diffs (truncated from 2515 to 300 lines):
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2295,7 +2295,7 @@ find_fk( mvc *sql, list *rels, list *exp
}
static int
-rels_find_one_rel( sql_rel **rels, int nr, sql_exp *e)
+exp_find_one_rel( sql_rel **rels, int nr, sql_exp *e)
{
int fnd = 0;
@@ -2309,6 +2309,22 @@ rels_find_one_rel( sql_rel **rels, int n
return fnd;
}
+static int
+exps_find_one_rel( sql_rel **rels, int nr, list *exps)
+{
+ int fnd = 0;
+
+ for(node *n = exps->h; n; n = n->next) {
+ int nfnd = exp_find_one_rel(rels, nr, n->data);
+ if (nfnd != fnd && fnd)
+ return 0;
+ fnd = nfnd;
+ if (!fnd)
+ return 0;
+ }
+ return fnd;
+}
+
/* TODO move popcount and popcount64 into gdk_*.h, used in gdk_cand, strimps
and here */
static inline int
popcount64(uint64_t x)
@@ -2382,18 +2398,16 @@ order_joins(visitor *v, list *rels, list
h[ci] = r1[ci] = r2[ci] = 0;
r3[ci] = 0;
- /* h[ci] = exp_find_rels(cje, rels) */
- if (cje->type != e_cmp || !is_complex_exp(cje->flag) ||
!find_prop(cje->p, PROP_HASHCOL) ||
- (cje->type == e_cmp && cje->f == NULL)) {
+ if (cje->type == e_cmp) {
cje->tmp = ci;
- r1[ci] = rels_find_one_rel(rels_a, nr_rels, cje->l);
- r2[ci] = rels_find_one_rel(rels_a, nr_rels, cje->r);
+ r1[ci] = cje->flag == cmp_filter ?
exps_find_one_rel(rels_a, nr_rels, cje->l) : exp_find_one_rel(rels_a, nr_rels,
cje->l);
+ r2[ci] = cje->flag == cmp_filter ?
exps_find_one_rel(rels_a, nr_rels, cje->r) : exp_find_one_rel(rels_a, nr_rels,
cje->r);
if (r1[ci])
h[ci] |= ((ulng)1)<<((r1[ci]-1)%64);
if (r2[ci])
h[ci] |= ((ulng)1)<<((r2[ci]-1)%64);
- if (cje->f) {
- r3[ci] = rels_find_one_rel(rels_a, nr_rels,
cje->f);
+ if (cje->f && cje->flag != cmp_filter) {
+ r3[ci] = exp_find_one_rel(rels_a, nr_rels,
cje->f);
if (r3[ci] == r2[ci])
r3[ci] = 0;
if (r3[ci])
@@ -2414,8 +2428,7 @@ order_joins(visitor *v, list *rels, list
* */
if (0 && popcount64(h[cje->tmp]) > 2)
assert(0);
- if (cje->type != e_cmp || !is_complex_exp(cje->flag) ||
!find_prop(cje->p, PROP_HASHCOL) ||
- (cje->type == e_cmp && cje->f == NULL)) {
+ if (cje->type == e_cmp) {
l = rels_a[r1[cje->tmp]];
r = rels_a[r2[cje->tmp]];
if (l && r)
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -123,7 +123,7 @@ if isatty:
res =
ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
assert res
(bufx, bufy, curx, cury, wattr,
- left, top, right, bottom, maxx, maxy) =
struct.unpack("hhhhHhhhhhh", csbi.raw)
+ left, top, right, bottom, maxx, maxy) =
struct.unpack('hhhhHhhhhhh', csbi.raw)
return wattr
reset = get_csbi_attributes(handle)
def prred(str,
@@ -273,16 +273,16 @@ def remove(file):
Warn(f'could not remove {file}')
def isexecutable(TST, ext = '.sh') :
- if os.name == "nt":
- for ext in ".exe", ".com", ".bat", ".cmd":
+ if os.name == 'nt':
+ for ext in '.exe', '.com', '.bat', '.cmd':
if TST.lower().endswith(ext):
ext = ''
- if os.path.isfile(TST+ext) or os.path.isfile(TST+ext+".src"):
+ if os.path.isfile(TST+ext) or os.path.isfile(TST+ext+'.src'):
return (True, ext)
- elif os.name == "posix":
+ elif os.name == 'posix':
TST += ext
if ( os.path.isfile(TST ) and os.access(TST ,os.X_OK) ) or
\
- ( os.path.isfile(TST+".src") and os.access(TST+".src",os.X_OK) ):
+ ( os.path.isfile(TST+'.src') and os.access(TST+'.src',os.X_OK) ):
return (True, ext)
return (False, '')
### isexecutable(TST, ext = '.sh') #
@@ -292,7 +292,7 @@ def CheckExec(cmd) :
x = isexecutable(os.path.join(p,cmd),'')
if x[0]:
return os.path.join(p, cmd + x[1])
- return ""
+ return ''
### CheckExec(cmd) #
import argparse
@@ -302,16 +302,16 @@ import threading
(F_SKIP, F_OK, F_WARN, F_SOCK, F_ERROR, F_TIME, F_ABRT, F_RECU, F_SEGV,
F_FAIL) = range(10)
FAILURES = {
- F_SKIP : ("F_SKIP", '-'),
- F_OK : ("F_OK", 'o'),
- F_WARN : ("F_WARN", 'x'),
- F_SOCK : ("F_SOCK", 'S'),
- F_ERROR : ("F_ERROR", 'X'),
- F_TIME : ("F_TIME", 'T'),
- F_ABRT : ("F_ABRT", 'A'),
- F_RECU : ("F_RECU", 'R'),
- F_SEGV : ("F_SEGV", 'C'),
- F_FAIL : ("F_FAIL", 'F'),
+ F_SKIP : ('F_SKIP', '-'),
+ F_OK : ('F_OK', 'o'),
+ F_WARN : ('F_WARN', 'x'),
+ F_SOCK : ('F_SOCK', 'S'),
+ F_ERROR : ('F_ERROR', 'X'),
+ F_TIME : ('F_TIME', 'T'),
+ F_ABRT : ('F_ABRT', 'A'),
+ F_RECU : ('F_RECU', 'R'),
+ F_SEGV : ('F_SEGV', 'C'),
+ F_FAIL : ('F_FAIL', 'F'),
}
CONDITIONALS = {
@@ -320,28 +320,28 @@ CONDITIONALS = {
# from configure.ag:
# These should cover all AM_CONDITIONALS defined in configure.ag, i.e.,
# `grep AM_CONDITIONAL configure.ag | sed
's|^AM_CONDITIONAL(\([^,]*\),.*$|\1|' | sort -u`
- 'HAVE_CUDF' : "@HAVE_CUDF_FALSE@",
- 'HAVE_CURL' : "@HAVE_CURL_FALSE@",
- 'HAVE_FITS' : "@HAVE_FITS_FALSE@",
- 'HAVE_GEOM' : "@HAVE_GEOM_FALSE@",
- 'HAVE_HGE' : "@HAVE_HGE_FALSE@",
- 'HAVE_LIBBZ2' : "@HAVE_LIBBZ2_FALSE@",
- 'HAVE_LIBLZ4' : "@HAVE_LIBLZ4_FALSE@",
- 'HAVE_LIBLZMA' : "@HAVE_LIBLZMA_FALSE@",
- 'HAVE_LIBPCRE' : "@HAVE_LIBPCRE_FALSE@",
- 'HAVE_LIBPY3' : "@HAVE_LIBPY3_FALSE@",
- 'HAVE_LIBR' : "@HAVE_LIBR_FALSE@",
- 'HAVE_LIBXML' : "@HAVE_LIBXML_FALSE@",
- 'HAVE_LIBZ' : "@HAVE_LIBZ_FALSE@",
- 'HAVE_NETCDF' : "@HAVE_NETCDF_FALSE@",
- 'HAVE_ODBC' : "@HAVE_ODBC_FALSE@",
- 'HAVE_OPENSSL' : "@HAVE_OPENSSL_FALSE@",
- 'HAVE_PROJ' : "@HAVE_PROJ_FALSE@",
- 'HAVE_SHP' : "@HAVE_SHP_FALSE@",
- 'HAVE_GETENTROPY' : "@HAVE_GETENTROPY_FALSE@",
- 'NATIVE_WIN32' : "@NATIVE_WIN32_FALSE@",
- 'NOT_WIN32' : "@NOT_WIN32_FALSE@",
- 'SANITIZER' : "@SANITIZER_FALSE@",
+ 'HAVE_CUDF' : '@HAVE_CUDF_FALSE@',
+ 'HAVE_CURL' : '@HAVE_CURL_FALSE@',
+ 'HAVE_FITS' : '@HAVE_FITS_FALSE@',
+ 'HAVE_GEOM' : '@HAVE_GEOM_FALSE@',
+ 'HAVE_HGE' : '@HAVE_HGE_FALSE@',
+ 'HAVE_LIBBZ2' : '@HAVE_LIBBZ2_FALSE@',
+ 'HAVE_LIBLZ4' : '@HAVE_LIBLZ4_FALSE@',
+ 'HAVE_LIBLZMA' : '@HAVE_LIBLZMA_FALSE@',
+ 'HAVE_LIBPCRE' : '@HAVE_LIBPCRE_FALSE@',
+ 'HAVE_LIBPY3' : '@HAVE_LIBPY3_FALSE@',
+ 'HAVE_LIBR' : '@HAVE_LIBR_FALSE@',
+ 'HAVE_LIBXML' : '@HAVE_LIBXML_FALSE@',
+ 'HAVE_LIBZ' : '@HAVE_LIBZ_FALSE@',
+ 'HAVE_NETCDF' : '@HAVE_NETCDF_FALSE@',
+ 'HAVE_ODBC' : '@HAVE_ODBC_FALSE@',
+ 'HAVE_OPENSSL' : '@HAVE_OPENSSL_FALSE@',
+ 'HAVE_PROJ' : '@HAVE_PROJ_FALSE@',
+ 'HAVE_SHP' : '@HAVE_SHP_FALSE@',
+ 'HAVE_GETENTROPY' : '@HAVE_GETENTROPY_FALSE@',
+ 'NATIVE_WIN32' : '@NATIVE_WIN32_FALSE@',
+ 'NOT_WIN32' : '@NOT_WIN32_FALSE@',
+ 'SANITIZER' : '@SANITIZER_FALSE@',
# unknown at compile time;
# hence, we set them only at runtime in main() below
'KNOWNFAIL' : False, # normally skip, but --alltests or explicit
@@ -561,7 +561,7 @@ TIMES = []
def ErrMsg(TEXT) :
print(end='', flush=True)
- print("\n%s: ERROR: %s\n" % (THISFILE, TEXT), file=sys.stderr,
flush=True)
+ print('\n%s: ERROR: %s\n' % (THISFILE, TEXT), file=sys.stderr,
flush=True)
### ErrMsg(TEXT) #
def ErrXit(TEXT) :
@@ -575,7 +575,7 @@ def Warn(TEXT) :
except IOError:
pass
try:
- print("\n%s Warning: %s\n" % (THISFILE, TEXT), file=sys.stderr,
flush=True)
+ print('\n%s Warning: %s\n' % (THISFILE, TEXT), file=sys.stderr,
flush=True)
except IOError:
pass
### Warn(TEXT) #
@@ -610,9 +610,9 @@ def CreateHtmlIndex (env, ssout, sserr,
TSTTRGDIR=env['TSTTRGDIR']
if TSTDIR:
- INDEX=".index"
+ INDEX='.index'
else:
- INDEX="index"
+ INDEX='index'
if body:
BACK = os.getcwd()
@@ -669,16 +669,16 @@ def CreateHtmlIndex (env, ssout, sserr,
Element('title', {}, Text(HTMLTITLE)),
stylesheet),
hbody)
- f = openutf8("%s.head.html" % INDEX,"w")
+ f = openutf8('%s.head.html' % INDEX,'w')
html.write(f, True)
f.close()
if TSTDIR:
layout = 'rows'
- ROWS="8%"
+ ROWS='8%'
else:
layout = 'cols'
- ROWS="10%"
+ ROWS='10%'
html = Element('html', {},
Element('head', {},
Element('meta', {'charset':'utf8'}),
@@ -706,7 +706,7 @@ def CreateHtmlIndex (env, ssout, sserr,
'bordercolor': white,
'marginwidth': '0',
'marginheight': '0'})))
- f = openutf8("%s.html" % INDEX, "w")
+ f = openutf8('%s.html' % INDEX, 'w')
html.write(f, True)
f.close()
os.chdir(BACK)
@@ -745,7 +745,7 @@ def CreateTstWhatXhtml (env, TST, stable
else:
diffclass = 'error'
- SYSTEM = "%s:" % DISTVER
+ SYSTEM = '%s:' % DISTVER
html = Element('html', {},
Element('head', {},
@@ -773,10 +773,10 @@ def CreateTstWhatXhtml (env, TST, stable
'bordercolor': white,
'marginwidth': '0',
'marginheight': '0'})))
- f = openutf8(".%s%s.html" % (TST, WHAT), "w")
+ f = openutf8('.%s%s.html' % (TST, WHAT), 'w')
html.write(f, True)
f.close()
- f = openutf8(".%s%s.head.html" % (TST, WHAT),"w")
+ f = openutf8('.%s%s.head.html' % (TST, WHAT),'w')
target = '%s_%s_%s_%s_body' % (DISTVER, TSTDIR, TST, WHAT[1:])
if REV: # implies URLPREFIX is not None
urlpref = '%s%s/%s' % (URLPREFIX, url(TSTDIR), TSTSUFF)
@@ -886,7 +886,7 @@ def CreateSrcIndex (env, TST, EXT) :
if REV:
framesrc = '%s%s/%s/%s%s' % (URLPREFIX, url(TSTDIR), TSTSUFF, TST, EXT)
else:
- f = openutf8(".%s.nosrc.index.html" % TST, "w")
+ f = openutf8('.%s.nosrc.index.html' % TST, 'w')
html = Element('html', {},
Element('head', {},
Element('title', {},
@@ -927,7 +927,7 @@ def CreateSrcIndex (env, TST, EXT) :
'bordercolor': white,
'marginwidth': '0',
'marginheight': '0'})))
- f = openutf8(".%s.src.index.html" % TST,"w")
+ f = openutf8('.%s.src.index.html' % TST,'w')
html.write(f, True)
f.close()
@@ -962,7 +962,7 @@ def CreateSrcIndex (env, TST, EXT) :
'cellspacing': '0',
'cellpadding': '3'},
tr))))
- f = openutf8(".%s.src.index.head.html" % TST, "w")
+ f = openutf8('.%s.src.index.head.html' % TST, 'w')
html.write(f, True)
f.close()
### CreateSrcIndex (env, TST, EXT) #
@@ -1027,7 +1027,7 @@ def AddTstToHtmlIndex (env, TST, STABLEo
td.addchildren(AddHref('.%s%s.html' % (TST, '.out'),
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]