Changeset: 1bb96864a107 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/1bb96864a107 Added Files: monetdb5/modules/mal/strimps.c Modified Files: monetdb5/modules/mal/CMakeLists.txt monetdb5/modules/mal/batExtensions.c Branch: string_imprints Log Message:
Extract a separate MAL module for strimps diffs (261 lines): diff --git a/monetdb5/modules/mal/CMakeLists.txt b/monetdb5/modules/mal/CMakeLists.txt --- a/monetdb5/modules/mal/CMakeLists.txt +++ b/monetdb5/modules/mal/CMakeLists.txt @@ -43,6 +43,7 @@ target_sources(malmodules projectionpath.c tablet.c tablet.h batcalc.c calc.c + strimps.c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/wlc.h) diff --git a/monetdb5/modules/mal/batExtensions.c b/monetdb5/modules/mal/batExtensions.c --- a/monetdb5/modules/mal/batExtensions.c +++ b/monetdb5/modules/mal/batExtensions.c @@ -339,69 +339,6 @@ PATstrimp_makehist(Client cntxt, MalBlkP return MAL_SUCCEED; } #endif -static str -PATstrimpCreate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) -{ - bat bid; - BAT *b; - (void)cntxt; - (void)mb; - - bid = *getArgReference_bat(stk, pci, 1); - if ((b = BATdescriptor(bid)) == NULL) - throw(MAL, "bat.strimpHeader", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - - if(STRMPcreate(b) != GDK_SUCCEED) - throw(MAL, "bat.strimpHistogram", SQLSTATE(HY002) OPERATION_FAILED); - - // *getArgReference_lng(stk, pci, 0) = 0; - return MAL_SUCCEED; -} - -static str -PATstrimpFilter(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - (void)cntxt; - (void)mb; - (void)stk; - (void)pci; - throw(MAL, "bat.strimpfilter", SQLSTATE(HY002) "UNIMPLEMENTED"); -} - -static str -PATstrimpFilterSelect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) -{ - bat bid, sid; - BAT *b, *s, *ob; - str pat; - - (void)cntxt; - (void)mb; - - bid = *getArgReference_bat(stk, pci, 1); - if ((b = BATdescriptor(bid)) == NULL) - throw(MAL, "bat.strimpfilter", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - - sid = *getArgReference_bat(stk, pci, 2); - if ((s = BATdescriptor(sid)) == NULL) - throw(MAL, "bat.strimpfilter", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - - assert(s->ttype == TYPE_void); - - if (!STRMPcreate(b)) { - throw(MAL, "bat.strimpfilter", SQLSTATE(HY002) OPERATION_FAILED); - } - - pat = *getArgReference_str(stk, pci, 3); - if ((ob = STRMPfilter(b, pat)) == NULL) { - BBPunfix(b->batCacheid); - throw(MAL, "bat.strimpfilter", SQLSTATE(HY002)); - } - - *getArgReference_bat(stk, pci, 0) = ob->batCacheid; - BBPkeepref(ob->batCacheid); - - return MAL_SUCCEED; -} #include "mel.h" mel_func batExtensions_init_funcs[] = { @@ -432,14 +369,6 @@ mel_func batExtensions_init_funcs[] = { #endif pattern("bat", "appendBulk", CMDBATappend_bulk, false, "append the arguments ins to i", args(1,4, batargany("",1), batargany("i",1),arg("force",bit),varargany("ins",1))), pattern("bat", "appendBulk", CMDBATappend_bulk, false, "append the arguments ins to i", args(1,4, batargany("",1), batargany("i",1),arg("force",bit),batvarargany("ins",1))), - - /* String imprints */ - // pattern("bat", "strimpNDigrams", PATstrimp_ndigrams, false, "count digrams in a string bat", args(1,2,arg("",lng),batarg("b",str))), - // pattern("bat", "strimpHistogram", PATstrimp_makehist, false, "make a histogram of all the byte pairs in a BAT", args(2,3,arg("",lng), batarg("",lng),batarg("b",str))), - pattern("bat", "mkstrimp", PATstrimpCreate, false, "construct the strimp a BAT", args(1,2,arg("",void),batarg("b",str))), - pattern("bat", "strimpfilter", PATstrimpFilter, false, "", args(1,3,arg("",bit),arg("b",str),arg("q",str))), - pattern("bat", "strimpfilterselect", PATstrimpFilterSelect, false, "", args(1,5,batarg("",oid),batarg("b",str),batarg("s",oid),arg("q",str),arg("a",bit))), - pattern("bat", "strimpfilterjoin", PATstrimpFilter, false, "", args(2,8,batarg("",oid),batarg("b",str),arg("q",str))), { .imp=NULL } }; #include "mal_import.h" diff --git a/monetdb5/modules/mal/strimps.c b/monetdb5/modules/mal/strimps.c new file mode 100644 --- /dev/null +++ b/monetdb5/modules/mal/strimps.c @@ -0,0 +1,157 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V. + */ +#include "monetdb_config.h" +#include "mal_client.h" +#include "mal_interpreter.h" +#include "mal_exception.h" + +#if 0 +/* + * String imprints. + */ +static str +PATstrimp_ndigrams(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + bat bid; + BAT *b; + size_t n; + + (void)cntxt; + (void)mb; + + // return mythrow(MAL, "batcalc.striter", OPERATION_FAILED); + bid = *getArgReference_bat(stk, pci, 1); + if ((b = BATdescriptor(bid)) == NULL) + throw(MAL, "strimps.strimpDigrams", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + + if (!STRMPndigrams(b, &n)) { + throw(MAL, "strimps.strimpDigrams", SQLSTATE(HY002) OPERATION_FAILED); + } + + *getArgReference_lng(stk, pci, 0) = n; + + return MAL_SUCCEED; +} + +static str +PATstrimp_makehist(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + bat bid; + BAT *b, *ob; + size_t i; + uint64_t hist[STRIMP_HISTSIZE]; + size_t count; + + (void)cntxt; + (void)mb; + + bid = *getArgReference_bat(stk, pci, 2); + if ((b = BATdescriptor(bid)) == NULL) + throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + + if (!STRMPmakehistogram(b, hist, STRIMP_HISTSIZE, &count)) { + throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY002) OPERATION_FAILED); + } + + ob = COLnew(0, TYPE_lng, STRIMP_HISTSIZE, TRANSIENT); + if (ob == NULL) { + throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY013) MAL_MALLOC_FAIL); + } + + for (i=0; i < STRIMP_HISTSIZE; i++) { + if (BUNappend(ob, hist + i, false) != GDK_SUCCEED) + throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY013) MAL_MALLOC_FAIL); + } + + *getArgReference_lng(stk, pci, 0) = count; + *getArgReference_bat(stk, pci, 1) = ob->batCacheid; + + BBPkeepref(ob->batCacheid); + return MAL_SUCCEED; +} +#endif + +static str +PATstrimpCreate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + bat bid; + BAT *b; + (void)cntxt; + (void)mb; + + bid = *getArgReference_bat(stk, pci, 1); + if ((b = BATdescriptor(bid)) == NULL) + throw(MAL, "strimps.strimpHeader", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + + if(STRMPcreate(b) != GDK_SUCCEED) + throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY002) OPERATION_FAILED); + + // *getArgReference_lng(stk, pci, 0) = 0; + return MAL_SUCCEED; +} + +static str +PATstrimpFilter(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { + (void)cntxt; + (void)mb; + (void)stk; + (void)pci; + throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) "UNIMPLEMENTED"); +} + +static str +PATstrimpFilterSelect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + bat bid, sid; + BAT *b, *s, *ob; + str pat; + + (void)cntxt; + (void)mb; + + bid = *getArgReference_bat(stk, pci, 1); + if ((b = BATdescriptor(bid)) == NULL) + throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + + sid = *getArgReference_bat(stk, pci, 2); + if ((s = BATdescriptor(sid)) == NULL) + throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + + assert(s->ttype == TYPE_void); + + + pat = *getArgReference_str(stk, pci, 3); + if ((ob = STRMPfilter(b, pat)) == NULL) { + BBPunfix(b->batCacheid); + throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) "filtering failed"); + } + + *getArgReference_bat(stk, pci, 0) = ob->batCacheid; + BBPkeepref(ob->batCacheid); + + return MAL_SUCCEED; +} + +#include "mel.h" +mel_func strimp_init_funcs[] = { + /* String imprints */ + // pattern("bat", "strimpNDigrams", PATstrimp_ndigrams, false, "count digrams in a string bat", args(1,2,arg("",lng),batarg("b",str))), + // pattern("bat", "strimpHistogram", PATstrimp_makehist, false, "make a histogram of all the byte pairs in a BAT", args(2,3,arg("",lng), batarg("",lng),batarg("b",str))), + pattern("strimps", "mkstrimp", PATstrimpCreate, false, "construct the strimp a BAT", args(1,2,arg("",void),batarg("b",str))), + pattern("strimps", "strimpfilter", PATstrimpFilter, false, "", args(1,3,arg("",bit),arg("b",str),arg("q",str))), + pattern("strimps", "strimpfilterselect", PATstrimpFilterSelect, false, "", args(1,5,batarg("",oid),batarg("b",str),batarg("s",oid),arg("q",str),arg("a",bit))), + pattern("strimps", "strimpfilterjoin", PATstrimpFilter, false, "", args(2,8,batarg("",oid),batarg("b",str),arg("q",str))), + { .imp=NULL } +}; +#include "mal_import.h" +#ifdef _MSC_VER +#undef read +#pragma section(".CRT$XCU",read) +#endif +LIB_STARTUP_FUNC(init_strimps_mal) +{ mal_module("strimps", NULL, strimp_init_funcs); } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list