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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list