Changeset: b64a371c6127 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b64a371c6127
Modified Files:
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/sql_basket.c
        sql/backends/monet5/sql_basket.h
Branch: trails
Log Message:

Added a new MAL function basket.cleanlock to clean up possible locks that have
been set on the baskets used in a query after an error has occurred.


diffs (71 lines):

diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -75,6 +75,7 @@ str capiRef;
 str catalogRef;
 str change_all_cpRef;
 str change_single_cpRef;
+str clean_streamtable_lockRef;
 str clear_tableRef;
 str closeRef;
 str columnBindRef;
@@ -387,6 +388,7 @@ abortRef = putName("abort");
        catalogRef = putName("catalog");
        change_all_cpRef = putName("change_all_cp");
        change_single_cpRef = putName("change_single_cp");
+       clean_streamtable_lockRef = putName("clean_streamtable_lock");
        clear_tableRef = putName("clear_table");
        closeRef = putName("close");
        columnBindRef = putName("columnBind");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -71,6 +71,7 @@ mal_export  str capiRef;
 mal_export  str catalogRef;
 mal_export  str change_all_cpRef;
 mal_export  str change_single_cpRef;
+mal_export  str clean_streamtable_lockRef;
 mal_export  str clear_tableRef;
 mal_export  str closeRef;
 mal_export  str columnBindRef;
diff --git a/sql/backends/monet5/sql_basket.c b/sql/backends/monet5/sql_basket.c
--- a/sql/backends/monet5/sql_basket.c
+++ b/sql/backends/monet5/sql_basket.c
@@ -559,6 +559,26 @@ BSKTunlock(Client cntxt, MalBlkPtr mb, M
        return MAL_SUCCEED;
 }
 
+// For the final clean up of the lock: unlock a basket if it's locked
+str
+BSKTcleanlock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       str sch = *getArgReference_str(stk,pci,2);
+       str tbl = *getArgReference_str(stk,pci,3);
+       int idx;
+
+       (void) cntxt;
+       (void) mb;
+
+       idx = BSKTlocate(sch, tbl);
+       if( idx ==0)
+               throw(SQL,"basket.cleanlock",SQLSTATE(3F000) "Stream table 
%s.%s not accessible\n",sch,tbl);
+       /* set the basket lock */
+       if (MT_lock_try(&baskets[idx].lock))
+               MT_lock_unset(&baskets[idx].lock);
+       return MAL_SUCCEED;
+}
+
 str
 BSKTdump(void *ret)
 {
diff --git a/sql/backends/monet5/sql_basket.h b/sql/backends/monet5/sql_basket.h
--- a/sql/backends/monet5/sql_basket.h
+++ b/sql/backends/monet5/sql_basket.h
@@ -61,6 +61,7 @@ sql5_export str BSKTreset(Client cntxt, 
 sql5_export str BSKTcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str BSKTlock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str BSKTunlock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+sql5_export str BSKTcleanlock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
 sql5_export str BSKTstatus( Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str BSKTdrop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to