Changeset: 6f3000412ff8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6f3000412ff8
Modified Files:
        sql/backends/monet5/sql.c
Branch: Mar2018
Log Message:

Avoid doing unnecessary work.


diffs (80 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1520,46 +1520,50 @@ DELTAsub(bat *result, const bat *col, co
                        BBPunfix(u_id->batCacheid);
                        throw(MAL, "sql.delta", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
                }
-               u = BATproject(u_val, u_id);
-               BBPunfix(u_val->batCacheid);
-               BBPunfix(u_id->batCacheid);
-               if (!u) {
-                       BBPunfix(c->batCacheid);
-                       throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               }
-               if (BATcount(u)) {      /* check selected updated values 
against candidates */
+               if (BATcount(u_val)) {
+                       u = BATproject(u_val, u_id);
+                       BBPunfix(u_val->batCacheid);
+                       BBPunfix(u_id->batCacheid);
+                       if (!u) {
+                               BBPunfix(c->batCacheid);
+                               throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       }
+
+                       /* check selected updated values against candidates */
                        BAT *c_ids = BATdescriptor(*cid);
-                       gdk_return rc;
 
                        if (!c_ids) {
                                BBPunfix(c->batCacheid);
                                BBPunfix(u->batCacheid);
                                throw(MAL, "sql.delta", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
                        }
-                       rc = BATsemijoin(&cminu, NULL, u, c_ids, NULL, NULL, 0, 
BUN_NONE);
+                       ret = BATsemijoin(&cminu, NULL, u, c_ids, NULL, NULL, 
0, BUN_NONE);
                        BBPunfix(c_ids->batCacheid);
-                       if (rc != GDK_SUCCEED) {
+                       if (ret != GDK_SUCCEED) {
                                BBPunfix(c->batCacheid);
                                BBPunfix(u->batCacheid);
                                throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
-               }
-               ret = BATappend(res, u, cminu, TRUE);
-               BBPunfix(u->batCacheid);
-               if (cminu)
-                       BBPunfix(cminu->batCacheid);
-               cminu = NULL;
-               if (ret != GDK_SUCCEED) {
+                       ret = BATappend(res, u, cminu, TRUE);
+                       BBPunfix(u->batCacheid);
+                       if (cminu)
+                               BBPunfix(cminu->batCacheid);
+                       cminu = NULL;
+                       if (ret != GDK_SUCCEED) {
+                               BBPunfix(res->batCacheid);
+                               throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       }
+
+                       ret = BATsort(&u, NULL, NULL, res, NULL, NULL, 0, 0);
                        BBPunfix(res->batCacheid);
-                       throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       if (ret != GDK_SUCCEED) {
+                               throw(MAL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       }
+                       res = u;
+               } else {
+                       BBPunfix(u_val->batCacheid);
+                       BBPunfix(u_id->batCacheid);
                }
-
-               ret = BATsort(&u, NULL, NULL, res, NULL, NULL, 0, 0);
-               BBPunfix(res->batCacheid);
-               if (ret != GDK_SUCCEED) {
-                       throw(MAL, "sql.delta", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-               }
-               res = u;
        }
 
        if (i) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to