Changeset: 504b00dff667 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=504b00dff667
Modified Files:
        MacOSX/post-install.sh
        clients/python2/monetdb/mapi.py
        clients/python3/monetdb/mapi.py
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/mal/Tests/inspect05.stable.out.int128
        monetdb5/optimizer/opt_reorder.c
        sql/storage/bat/bat_storage.c
        sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.sql
        sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
        sql/test/BugTracker-2016/Tests/storagemodel.Bug-3923.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out.int128
        sql/test/Users/Tests/dropManyUsers.Bug-3764.stable.out
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check0.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
        sql/test/leaks/Tests/drop3.stable.out
        sql/test/leaks/Tests/drop3.stable.out.int128
        sql/test/leaks/Tests/select1.stable.out.int128
        sql/test/leaks/Tests/select2.stable.out.int128
        sql/test/leaks/Tests/temp1.stable.out
        sql/test/leaks/Tests/temp1.stable.out.int128
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp2.stable.out.int128
        sql/test/leaks/Tests/temp3.stable.out
        sql/test/leaks/Tests/temp3.stable.out.int128
        sql/test/pg_regress/Tests/box.stable.err
        sql/test/pg_regress/Tests/path.stable.err
        sql/test/pg_regress/Tests/point.stable.err
        sql/test/pg_regress/Tests/polygon.stable.err
        tools/merovingian/daemon/monetdbd.1.in
Branch: data-vaults
Log Message:

Merge with default


diffs (truncated from 1631 to 300 lines):

diff --git a/MacOSX/post-install.sh b/MacOSX/post-install.sh
--- a/MacOSX/post-install.sh
+++ b/MacOSX/post-install.sh
@@ -2,6 +2,14 @@
 
 monetdb_path=/usr/local/monetdb/bin
 
-if [[ ":$PATH:" != *":$monetdb_path:"* ]]; then
-    printf '\n# Set MonetDB path\nexport PATH=$PATH:'$monetdb_path'\n' >> 
~/.profile
-fi
+case $PATH in
+*:$monetdb_path|*:$monetdb_path:*|$monetdb_path:*)
+    ;;
+*)
+    cat >> ~/.profile <<EOF
+
+# Set MonetDB path
+export PATH=\$PATH:$monetdb_path
+EOF
+    ;;
+esac
diff --git a/clients/python2/monetdb/mapi.py b/clients/python2/monetdb/mapi.py
--- a/clients/python2/monetdb/mapi.py
+++ b/clients/python2/monetdb/mapi.py
@@ -142,8 +142,9 @@ class Connection(object):
                 logger.info("redirect to monetdb://%s:%s/%s" %
                             (self.hostname, self.port, self.database))
                 self.socket.close()
-                self.connect(self.hostname, self.port, self.username,
-                             self.password, self.database, self.language)
+                self.connect(hostname=self.hostname, port=self.port,
+                             username=self.username, password=self.password,
+                             database=self.database, language=self.language)
 
             else:
                 raise ProgrammingError("unknown redirect: %s" % prompt)
diff --git a/clients/python3/monetdb/mapi.py b/clients/python3/monetdb/mapi.py
--- a/clients/python3/monetdb/mapi.py
+++ b/clients/python3/monetdb/mapi.py
@@ -143,8 +143,9 @@ class Connection(object):
                 logger.info("redirect to monetdb://%s:%s/%s" %
                             (self.hostname, self.port, self.database))
                 self.socket.close()
-                self.connect(self.hostname, self.port, self.username,
-                             self.password, self.database, self.language)
+                self.connect(hostname=self.hostname, port=self.port,
+                             username=self.username, password=self.password,
+                             database=self.database, language=self.language)
 
             else:
                 raise ProgrammingError("unknown redirect: %s" % prompt)
diff --git a/monetdb5/modules/mal/Tests/inspect05.stable.out.int128 
b/monetdb5/modules/mal/Tests/inspect05.stable.out.int128
--- a/monetdb5/modules/mal/Tests/inspect05.stable.out.int128
+++ b/monetdb5/modules/mal/Tests/inspect05.stable.out.int128
@@ -38,67 +38,72 @@ Ready.
 [ 6@0, "delete",       "command",      "bat",  "(b:bat[:any_1]):bat[:any_1] ", 
"BKCdelete_all;"        ]
 [ 7@0, "delete",       "command",      "bat",  
"(b:bat[:any_1],d:bat[:oid]):bat[:any_1] ",     "BKCdelete_multi;"      ]
 [ 8@0, "densebat",     "command",      "bat",  
"(b:bat[:any_1],h:oid):bat[:any_1] ",   "BKCdelete;"    ]
-[ 9@0, "getAccess",    "command",      "bat",  "(b:bat[:any_1]):str ", 
"BKCgetBBPname;"        ]
-[ 10@0,        "getCapacity",  "command",      "bat",  "(b:bat[:any_1]):oid ", 
"BKCgetSequenceBase;"   ]
-[ 11@0,        "getColumnType",        "command",      "bat",  
"(b:bat[:any_1]):str ", "BKCgetAccess;" ]
-[ 12@0,        "getName",      "command",      "bat",  "(bid:bat[:any_1]):str 
",       "BKCgetRole;"   ]
-[ 13@0,        "getRole",      "command",      "bat",  "(b:bat[:any_1]):str ", 
"BKCgetColumnType;"     ]
-[ 14@0,        "getSequenceBase",      "command",      "bat",  
"(b:bat[:any_1]):lng ", "BKCgetCapacity;"       ]
-[ 15@0,        "getSize",      "command",      "bat",  "(b:bat[:any_1]):lng ", 
"BKCgetSize;"   ]
-[ 16@0,        "imprints",     "command",      "bat",  "(b:bat[:hge]):lng ",   
"CMDBATimprintsize;"    ]
-[ 17@0,        "imprints",     "command",      "bat",  "(b:bat[:hge]):void ",  
"CMDBATimprints;"       ]
-[ 18@0,        "imprints",     "command",      "bat",  "(b:bat[:dbl]):lng ",   
"CMDBATimprintsize;"    ]
-[ 19@0,        "imprints",     "command",      "bat",  "(b:bat[:flt]):lng ",   
"CMDBATimprintsize;"    ]
-[ 20@0,        "imprints",     "command",      "bat",  "(b:bat[:lng]):lng ",   
"CMDBATimprintsize;"    ]
-[ 21@0,        "imprints",     "command",      "bat",  "(b:bat[:int]):lng ",   
"CMDBATimprintsize;"    ]
-[ 22@0,        "imprints",     "command",      "bat",  "(b:bat[:sht]):lng ",   
"CMDBATimprintsize;"    ]
-[ 23@0,        "imprintsize",  "command",      "bat",  "(b:bat[:bte]):lng ",   
"CMDBATimprintsize;"    ]
-[ 24@0,        "imprintsize",  "command",      "bat",  "(b:bat[:dbl]):void ",  
"CMDBATimprints;"       ]
-[ 25@0,        "imprintsize",  "command",      "bat",  "(b:bat[:flt]):void ",  
"CMDBATimprints;"       ]
-[ 26@0,        "imprintsize",  "command",      "bat",  "(b:bat[:lng]):void ",  
"CMDBATimprints;"       ]
-[ 27@0,        "imprintsize",  "command",      "bat",  "(b:bat[:int]):void ",  
"CMDBATimprints;"       ]
-[ 28@0,        "imprintsize",  "command",      "bat",  "(b:bat[:sht]):void ",  
"CMDBATimprints;"       ]
-[ 29@0,        "imprintsize",  "command",      "bat",  "(b:bat[:bte]):void ",  
"CMDBATimprints;"       ]
-[ 30@0,        "info", "command",      "bat",  
"(a:bat[:oid],b:bat[:oid]):bat[:oid] ", "BKCintersectcand;"     ]
-[ 31@0,        "intersectcand",        "command",      "bat",  
"(b1:bat[:any_1],b2:bat[:any_2]):bit ", "BKCisSynced;"  ]
-[ 32@0,        "isPersistent", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisPersistent;"      ]
-[ 33@0,        "isSorted",     "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisTransient;"       ]
-[ 34@0,        "isSortedReverse",      "command",      "bat",  
"(b:bat[:any_1]):bit ", "BKCisSortedReverse;"   ]
-[ 35@0,        "isSynced",     "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisSorted;"  ]
-[ 36@0,        "isTransient",  "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCgetKey;"    ]
-[ 37@0,        "isaKey",       "command",      "bat",  "(b:bat[:any_1]) 
(X_2:bat[:str],X_3:bat[:str]) ",       "BKCinfo;"      ]
-[ 38@0,        "mergecand",    "command",      "bat",  
"(a:bat[:oid],b:bat[:oid]):bat[:oid] ", "BKCmergecand;" ]
-[ 39@0,        "mirror",       "command",      "bat",  
"(b:bat[:any_2]):bat[:oid] ",   "BKCmirror;"    ]
-[ 40@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:lng):bat[:any_1] ",      "CMDBATnew_persistent;" ]
-[ 41@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:int):bat[:any_1] ",      "CMDBATnew_persistent;" ]
-[ 42@0,        "new",  "pattern",      "bat",  "(ht:oid,tt:any_1):bat[:any_1] 
",       "CMDBATnew_persistent;" ]
-[ 43@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:lng):bat[:any_1] ",      "CMDBATnew;"    ]
-[ 44@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:int):bat[:any_1] ",      "CMDBATnew;"    ]
-[ 45@0,        "new",  "pattern",      "bat",  "(ht:oid,tt:any_1):bat[:any_1] 
",       "CMDBATnew;"    ]
-[ 46@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1,size:lng):bat[:any_1] ",     "CMDBATnewColumn;"      ]
-[ 47@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1,size:int):bat[:any_1] ",     "CMDBATnewColumn;"      ]
-[ 48@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1):bat[:any_1] ",      "CMDBATnewColumn;"      ]
-[ 49@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1],pieces:int,n:int):bat[:any_1] ",        "CMDBATpartition2;"     
]
-[ 50@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1]):bat[:any_1]... ",      "CMDBATpartition;"      ]
-[ 51@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],del:bat[:oid]):bat[:oid] ",     "BKCreuseBATmap;"       ]
-[ 52@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],del:bat[:oid]):bat[:any_1] ",   "BKCreuseBAT;"  ]
-[ 53@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],rid:bat[:oid],val:bat[:any_1],force:bit):bat[:any_1] ", 
"BKCbat_inplace_force;" ]
-[ 54@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],rid:bat[:oid],val:bat[:any_1]):bat[:any_1] ",   
"BKCbat_inplace;"       ]
-[ 55@0,        "reuse",        "command",      "bat",  
"(b:bat[:any_1],h:oid,t:any_1,force:bit):bat[:any_1] ", "BKCbun_inplace_force;" 
]
-[ 56@0,        "reuseMap",     "command",      "bat",  
"(b:bat[:any_1],h:oid,t:any_1):bat[:any_1] ",   "BKCbun_inplace;"       ]
-[ 57@0,        "save", "pattern",      "bat",  "(val:any_1):bat[:any_1] ",     
"CMDBATsingle;" ]
-[ 58@0,        "save", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetImprints;"       ]
-[ 59@0,        "setAccess",    "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetHash;"   ]
-[ 60@0,        "setColumn",    "command",      "bat",  "(nme:str):bit ",       
"BKCsave;"      ]
-[ 61@0,        "setColumn",    "command",      "bat",  "(nme:bat[:any_1]):void 
",      "BKCsave2;"     ]
-[ 62@0,        "setHash",      "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetPersistent;"     ]
-[ 63@0,        "setImprints",  "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetTransient;"      ]
-[ 64@0,        "setKey",       "command",      "bat",  
"(b:bat[:any_1],h:str,t:str):void ",    "BKCsetColumns;"        ]
-[ 65@0,        "setName",      "command",      "bat",  
"(b:bat[:any_1],t:str):void ",  "BKCsetColumn;" ]
-[ 66@0,        "setPersistent",        "command",      "bat",  
"(b:bat[:any_1],h:str,t:str):void ",    "BKCsetRole;"   ]
-[ 67@0,        "setRole",      "command",      "bat",  
"(b:bat[:any_1],s:str):void ",  "BKCsetName;"   ]
-[ 68@0,        "setTransient", "command",      "bat",  
"(b:bat[:any_1],mode:str):bat[:any_1] ",        "BKCsetAccess;" ]
-[ 69@0,        "single",       "command",      "bat",  
"(b:bat[:any_1],mode:bit):bat[:any_1] ",        "BKCsetkey;"    ]
+[ 9@0, "getAccess",    "pattern",      "bat",  "(bv:bat[:any_1]):bat[:oid] ",  
"OIDXgetorderidx;"      ]
+[ 10@0,        "getCapacity",  "command",      "bat",  "(b:bat[:any_1]):str ", 
"BKCgetBBPname;"        ]
+[ 11@0,        "getColumnType",        "command",      "bat",  
"(b:bat[:any_1]):oid ", "BKCgetSequenceBase;"   ]
+[ 12@0,        "getName",      "command",      "bat",  "(b:bat[:any_1]):str ", 
"BKCgetAccess;" ]
+[ 13@0,        "getRole",      "command",      "bat",  "(bid:bat[:any_1]):str 
",       "BKCgetRole;"   ]
+[ 14@0,        "getSequenceBase",      "command",      "bat",  
"(b:bat[:any_1]):str ", "BKCgetColumnType;"     ]
+[ 15@0,        "getSize",      "command",      "bat",  "(b:bat[:any_1]):lng ", 
"BKCgetCapacity;"       ]
+[ 16@0,        "getorderidx",  "command",      "bat",  "(b:bat[:any_1]):lng ", 
"BKCgetSize;"   ]
+[ 17@0,        "hasorderidx",  "pattern",      "bat",  "(bv:bat[:any_1]):bit 
",        "OIDXhasorderidx;"      ]
+[ 18@0,        "imprints",     "command",      "bat",  "(b:bat[:hge]):lng ",   
"CMDBATimprintsize;"    ]
+[ 19@0,        "imprints",     "command",      "bat",  "(b:bat[:hge]):void ",  
"CMDBATimprints;"       ]
+[ 20@0,        "imprints",     "command",      "bat",  "(b:bat[:dbl]):lng ",   
"CMDBATimprintsize;"    ]
+[ 21@0,        "imprints",     "command",      "bat",  "(b:bat[:flt]):lng ",   
"CMDBATimprintsize;"    ]
+[ 22@0,        "imprints",     "command",      "bat",  "(b:bat[:lng]):lng ",   
"CMDBATimprintsize;"    ]
+[ 23@0,        "imprints",     "command",      "bat",  "(b:bat[:int]):lng ",   
"CMDBATimprintsize;"    ]
+[ 24@0,        "imprints",     "command",      "bat",  "(b:bat[:sht]):lng ",   
"CMDBATimprintsize;"    ]
+[ 25@0,        "imprintsize",  "command",      "bat",  "(b:bat[:bte]):lng ",   
"CMDBATimprintsize;"    ]
+[ 26@0,        "imprintsize",  "command",      "bat",  "(b:bat[:dbl]):void ",  
"CMDBATimprints;"       ]
+[ 27@0,        "imprintsize",  "command",      "bat",  "(b:bat[:flt]):void ",  
"CMDBATimprints;"       ]
+[ 28@0,        "imprintsize",  "command",      "bat",  "(b:bat[:lng]):void ",  
"CMDBATimprints;"       ]
+[ 29@0,        "imprintsize",  "command",      "bat",  "(b:bat[:int]):void ",  
"CMDBATimprints;"       ]
+[ 30@0,        "imprintsize",  "command",      "bat",  "(b:bat[:sht]):void ",  
"CMDBATimprints;"       ]
+[ 31@0,        "imprintsize",  "command",      "bat",  "(b:bat[:bte]):void ",  
"CMDBATimprints;"       ]
+[ 32@0,        "info", "command",      "bat",  
"(a:bat[:oid],b:bat[:oid]):bat[:oid] ", "BKCintersectcand;"     ]
+[ 33@0,        "intersectcand",        "command",      "bat",  
"(b1:bat[:any_1],b2:bat[:any_2]):bit ", "BKCisSynced;"  ]
+[ 34@0,        "isPersistent", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisPersistent;"      ]
+[ 35@0,        "isSorted",     "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisTransient;"       ]
+[ 36@0,        "isSortedReverse",      "command",      "bat",  
"(b:bat[:any_1]):bit ", "BKCisSortedReverse;"   ]
+[ 37@0,        "isSynced",     "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCisSorted;"  ]
+[ 38@0,        "isTransient",  "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCgetKey;"    ]
+[ 39@0,        "isaKey",       "command",      "bat",  "(b:bat[:any_1]) 
(X_2:bat[:str],X_3:bat[:str]) ",       "BKCinfo;"      ]
+[ 40@0,        "mergecand",    "command",      "bat",  
"(a:bat[:oid],b:bat[:oid]):bat[:oid] ", "BKCmergecand;" ]
+[ 41@0,        "mirror",       "command",      "bat",  
"(b:bat[:any_2]):bat[:oid] ",   "BKCmirror;"    ]
+[ 42@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:lng):bat[:any_1] ",      "CMDBATnew_persistent;" ]
+[ 43@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:int):bat[:any_1] ",      "CMDBATnew_persistent;" ]
+[ 44@0,        "new",  "pattern",      "bat",  "(ht:oid,tt:any_1):bat[:any_1] 
",       "CMDBATnew_persistent;" ]
+[ 45@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:lng):bat[:any_1] ",      "CMDBATnew;"    ]
+[ 46@0,        "new",  "pattern",      "bat",  
"(ht:oid,tt:any_1,size:int):bat[:any_1] ",      "CMDBATnew;"    ]
+[ 47@0,        "new",  "pattern",      "bat",  "(ht:oid,tt:any_1):bat[:any_1] 
",       "CMDBATnew;"    ]
+[ 48@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1,size:lng):bat[:any_1] ",     "CMDBATnewColumn;"      ]
+[ 49@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1,size:int):bat[:any_1] ",     "CMDBATnewColumn;"      ]
+[ 50@0,        "new_persistent",       "pattern",      "bat",  
"(tt:any_1):bat[:any_1] ",      "CMDBATnewColumn;"      ]
+[ 51@0,        "orderidx",     "pattern",      "bat",  
"(bv:bat[:any_1],l:bat[:any_1]...):void ",      "OIDXmerge;"    ]
+[ 52@0,        "orderidx",     "pattern",      "bat",  
"(bv:bat[:any_1],pieces:int):void ",    "OIDXcreate;"   ]
+[ 53@0,        "orderidx",     "pattern",      "bat",  "(bv:bat[:any_1]):void 
",       "OIDXcreate;"   ]
+[ 54@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1],pieces:int,n:int):bat[:any_1] ",        "CMDBATpartition2;"     
]
+[ 55@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1]):bat[:any_1]... ",      "CMDBATpartition;"      ]
+[ 56@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],del:bat[:oid]):bat[:oid] ",     "BKCreuseBATmap;"       ]
+[ 57@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],del:bat[:oid]):bat[:any_1] ",   "BKCreuseBAT;"  ]
+[ 58@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],rid:bat[:oid],val:bat[:any_1],force:bit):bat[:any_1] ", 
"BKCbat_inplace_force;" ]
+[ 59@0,        "replace",      "command",      "bat",  
"(b:bat[:any_1],rid:bat[:oid],val:bat[:any_1]):bat[:any_1] ",   
"BKCbat_inplace;"       ]
+[ 60@0,        "reuse",        "command",      "bat",  
"(b:bat[:any_1],h:oid,t:any_1,force:bit):bat[:any_1] ", "BKCbun_inplace_force;" 
]
+[ 61@0,        "reuseMap",     "command",      "bat",  
"(b:bat[:any_1],h:oid,t:any_1):bat[:any_1] ",   "BKCbun_inplace;"       ]
+[ 62@0,        "save", "pattern",      "bat",  "(val:any_1):bat[:any_1] ",     
"CMDBATsingle;" ]
+[ 63@0,        "save", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetImprints;"       ]
+[ 64@0,        "setAccess",    "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetHash;"   ]
+[ 65@0,        "setColumn",    "command",      "bat",  "(nme:str):bit ",       
"BKCsave;"      ]
+[ 66@0,        "setColumn",    "command",      "bat",  "(nme:bat[:any_1]):void 
",      "BKCsave2;"     ]
+[ 67@0,        "setHash",      "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetPersistent;"     ]
+[ 68@0,        "setImprints",  "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetTransient;"      ]
+[ 69@0,        "setKey",       "command",      "bat",  
"(b:bat[:any_1],h:str,t:str):void ",    "BKCsetColumns;"        ]
+[ 70@0,        "setName",      "command",      "bat",  
"(b:bat[:any_1],t:str):void ",  "BKCsetColumn;" ]
+[ 71@0,        "setPersistent",        "command",      "bat",  
"(b:bat[:any_1],h:str,t:str):void ",    "BKCsetRole;"   ]
+[ 72@0,        "setRole",      "command",      "bat",  
"(b:bat[:any_1],s:str):void ",  "BKCsetName;"   ]
+[ 73@0,        "setTransient", "command",      "bat",  
"(b:bat[:any_1],mode:str):bat[:any_1] ",        "BKCsetAccess;" ]
+[ 74@0,        "single",       "command",      "bat",  
"(b:bat[:any_1],mode:bit):bat[:any_1] ",        "BKCsetkey;"    ]
 
 # 08:55:30 >  
 # 08:55:30 >  Done.
diff --git a/monetdb5/optimizer/opt_reorder.c b/monetdb5/optimizer/opt_reorder.c
--- a/monetdb5/optimizer/opt_reorder.c
+++ b/monetdb5/optimizer/opt_reorder.c
@@ -201,6 +201,66 @@ OPTbreadthfirst(Client cntxt, MalBlkPtr 
        return 0;
 }
 
+/* SQL appends are collected to create a better dataflow block */
+/* alternatively, we should postpone all mcv-chained actions */
+static int
+OPTpostponeAppends(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
+{
+       int i,j,k=0, actions =0, last;
+       InstrPtr *old, *appends;
+       int limit;
+       (void) cntxt;
+       (void) stk;
+       (void) p;
+
+       appends =(InstrPtr*) GDKzalloc(mb->ssize * sizeof(InstrPtr));
+       if( appends == NULL)
+               return 0;
+       limit= mb->stop;
+       old = mb->stmt;
+       if ( newMalBlkStmt(mb, mb->ssize) < 0) {
+               GDKfree(appends);
+               return 0;
+       }
+       for( i=0; i<limit; i++){
+               if ( getModuleId(old[i]) == sqlRef && getFunctionId(old[i]) == 
appendRef){
+                       last = i;
+               }
+       }
+       for( i=0; i<limit; i++){
+               if ( getModuleId(old[i]) == sqlRef && getFunctionId(old[i]) == 
appendRef){
+                       // only postpone under strict conditions
+                       assert( isVarConstant(mb,getArg(old[i],2)));
+                       assert( isVarConstant(mb,getArg(old[i],3)));
+                       assert( isVarConstant(mb,getArg(old[i],4)));
+                       if( actions )
+                               pushInstruction(mb, old[i]);
+                       else {
+                               if (k > 0 &&  getArg(old[i],1) == 
getArg(appends[k-1],0))
+                                       appends[k++]= old[i];
+                               else {
+                                       for(j=0; j<k; j++)
+                                               pushInstruction(mb,appends[j]);
+                                       pushInstruction(mb, old[i]);
+                                       actions++;
+                               }
+                       }
+                       continue;
+               }
+               if ( i == last){
+                       actions++;
+                       for(j=0; j<k; j++)
+                               pushInstruction(mb,appends[j]);
+               }
+               pushInstruction(mb,old[i]);
+       }
+       for( ; i<limit; i++){
+               pushInstruction(mb,old[i]);
+       }
+       GDKfree(appends);
+       return actions;
+}
+
 int
 OPTreorderImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
 {
@@ -275,5 +335,6 @@ OPTreorderImplementation(Client cntxt, M
        OPTremoveDep(dep, limit);
        GDKfree(uselist);
        GDKfree(old);
+       (void) OPTpostponeAppends(cntxt, mb, 0, 0);
        return 1;
 }
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1664,7 +1664,7 @@ BATcleanProps( BAT *b )
 }
 
 static int 
-gtr_update_delta( sql_trans *tr, sql_delta *cbat)
+gtr_update_delta( sql_trans *tr, sql_delta *cbat, int *changes)
 {
        int ok = LOG_OK;
        BAT *ins, *cur;
@@ -1676,6 +1676,7 @@ gtr_update_delta( sql_trans *tr, sql_del
        ins = temp_descriptor(cbat->ibid);
        /* any inserts */
        if (BUNlast(ins) > BUNfirst(ins)) {
+               (*changes)++;
                assert(cur->T->heap.storage != STORE_PRIV);
                BATappend(cur,ins,TRUE);
                cbat->cnt = cbat->ibase = BATcount(cur);
@@ -1690,6 +1691,7 @@ gtr_update_delta( sql_trans *tr, sql_del
                BAT *uv = temp_descriptor(cbat->uvbid);
                /* any updates */
                if (BUNlast(ui) > BUNfirst(ui)) {
+                       (*changes)++;
                        void_replace_bat(cur, ui, uv, TRUE);
                        temp_destroy(cbat->uibid);
                        temp_destroy(cbat->uvbid);
@@ -1709,7 +1711,7 @@ gtr_update_delta( sql_trans *tr, sql_del
 }
 
 static int
-gtr_update_dbat(sql_dbat *d)
+gtr_update_dbat(sql_dbat *d, int *changes)
 {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to