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