Changeset: 035e117d3d00 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=035e117d3d00
Modified Files:
monetdb5/extras/rdf/rdfscan.c
monetdb5/extras/rdf/rdfscan.h
monetdb5/extras/rdf/rdfschema.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_rdf.c
sql/backends/monet5/sql_rdf.h
sql/backends/monet5/sql_rdf.mal
sql/backends/monet5/sql_rdf_jgraph.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/common/sql_types.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_rdfscan.c
sql/server/rel_rdfscan.h
Branch: rdf
Log Message:
Handling exceptions
diffs (truncated from 709 to 300 lines):
diff --git a/monetdb5/extras/rdf/rdfscan.c b/monetdb5/extras/rdf/rdfscan.c
--- a/monetdb5/extras/rdf/rdfscan.c
+++ b/monetdb5/extras/rdf/rdfscan.c
@@ -164,7 +164,7 @@ void freeParams(RdfScanParams *rsParam){
}
-str RDFscan(str s, str schema){
+str RDFscan_old(str s, str schema){
str query;
RdfScanParams *rsParam = NULL;
@@ -185,3 +185,10 @@ str RDFscan(str s, str schema){
return MAL_SUCCEED;
}
+
+str
+RDFscan(oid *props, BAT **resBATs){
+ (void) props;
+ (void) resBATs;
+ return MAL_SUCCEED;
+}
diff --git a/monetdb5/extras/rdf/rdfscan.h b/monetdb5/extras/rdf/rdfscan.h
--- a/monetdb5/extras/rdf/rdfscan.h
+++ b/monetdb5/extras/rdf/rdfscan.h
@@ -44,6 +44,9 @@ typedef struct RdfScanParams {
rdf_export str
-RDFscan(str query, str schema);
+RDFscan_old(str query, str schema);
+
+rdf_export str
+RDFscan(oid *props, BAT **resBATs);
#endif /* RDFSCAN */
diff --git a/monetdb5/extras/rdf/rdfschema.h b/monetdb5/extras/rdf/rdfschema.h
--- a/monetdb5/extras/rdf/rdfschema.h
+++ b/monetdb5/extras/rdf/rdfschema.h
@@ -93,6 +93,11 @@ typedef struct PropStat {
int maxNumPPerCS; /* Maximum number of different
properties in one CS */
} PropStat;
+typedef struct PsoPropStat {
+ BAT* pBat; /* Store the list of properties */
+ BAT* offsetBat; /* Store the first pos where the prop
starts in PSO table */
+} PsoPropStat;
+
#define INIT_PROP_NUM 10
#define INIT_CS_PER_PROP 10
#define USINGTFIDF 1
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2416,6 +2416,15 @@ rel2bin_select( mvc *sql, sql_rel *rel,
return stmt_list(sql->sa, l);
}
+
+static stmt *
+rel2bin_rdfscan( mvc *sql, sql_rel *rel, list *refs)
+{
+ (void) rel;
+ (void) refs;
+ return stmt_rdfscan(sql->sa);
+}
+
static stmt *
rel2bin_groupby( mvc *sql, sql_rel *rel, list *refs)
{
@@ -4433,8 +4442,12 @@ subrel_bin(mvc *sql, sql_rel *rel, list
sql->type = Q_TABLE;
break;
case op_select:
+ s = rel2bin_select(sql, rel, refs);
+ sql->type = Q_TABLE;
+ break;
case op_rdfscan:
- s = rel2bin_select(sql, rel, refs);
+ if (1) s = rel2bin_rdfscan(sql, rel, refs);
+ else s = rel2bin_select(sql, rel, refs);
sql->type = Q_TABLE;
break;
case op_groupby:
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
@@ -130,7 +130,7 @@ sql_symbol2relation(mvc *c, symbol *sym)
if (1) c->emode = m_normal;
- if (0) c->emod = mod_explain;
+ if (1) c->emod = mod_explain;
}
}
else {
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -131,16 +131,6 @@ sql5_export str SQLdrop_hash(Client cntx
sql5_export str SQLnewDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLdropDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLargRecord(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-sql5_export str SQLrdfShred(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-sql5_export str SQLrdfreorganize(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-sql5_export str SQLrdfRetrieveSubschema(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
-sql5_export str SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
-sql5_export str SQLrdfdeserialize(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-//sql5_export str SQLrdfidtostr(str *ret, oid *id);
-sql5_export str SQLrdfidtostr(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-sql5_export str SQLrdfidtostr_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-sql5_export str SQLrdfstrtoid(oid *ret, str *s);
-//sql5_export str SQLrdfstrtoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLoptimizersUpdate(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str month_interval_str(int *ret, const str *s, const int *ek,
const int *sk);
sql5_export str second_interval_str(lng *res, const str *s, const int *ek,
const int *sk);
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1367,6 +1367,14 @@ static int
s->nr = newTmpVariable(mb, TYPE_any);
}
break;
+
+ case st_rdfscan:
+ q = newStmt1(mb, sqlRef, "rdfscan");
+ q = pushArgument(mb, q, 222) ;
+ q = pushStr(mb, q, "Testing rdfscan");
+ if (q == NULL)
+ return -1;
+ break;
case st_uselect2:
case st_join2:{
InstrPtr r, p;
diff --git a/sql/backends/monet5/sql_rdf.c b/sql/backends/monet5/sql_rdf.c
--- a/sql/backends/monet5/sql_rdf.c
+++ b/sql/backends/monet5/sql_rdf.c
@@ -1473,7 +1473,7 @@ SQLrdfstrtoid(oid *ret, str *s){
#endif
str
-SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
+SQLrdfScan_old(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
str msg;
int ret;
mvc *m = NULL;
@@ -1483,13 +1483,85 @@ SQLrdfScan(Client cntxt, MalBlkPtr mb, M
rethrow("sql.rdfScan", msg, getSQLContext(cntxt, mb, &m, NULL));
- rethrow("sql.rdfScan", msg, RDFscan(*params, *schema));
+ rethrow("sql.rdfScan", msg, RDFscan_old(*params, *schema));
(void) ret;
return MAL_SUCCEED;
}
+/*
+ * This is the same as the function in sql.c
+ * */
+static void
+bat2return(MalStkPtr stk, InstrPtr pci, BAT **b)
+{
+ int i;
+
+ for (i = 0; i < pci->retc; i++) {
+ *getArgReference_bat(stk, pci, i) = b[i]->batCacheid;
+ BBPkeepref(b[i]->batCacheid);
+ }
+}
+
+
+/*
+ * The input for this pattern should be
+ * Number of Ps, Number of RPs, <List of Prop Ids>
+ * */
+str
+SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
+
+ BAT **b = NULL; //List of BATs (columns) to be returned
+ int nRet = -1; //Number of BATs to return
+ int *nP = NULL; //Number of props
+ int *nRP = NULL;
+ oid *lstProps = NULL;
+ int i;
+
+
+ (void) cntxt;
+ (void) mb;
+ (void) stk;
+ (void) pci;
+
+
+ nP = (int *) getArgReference(stk, pci, pci->retc + 0);
+ nRP = (int *) getArgReference(stk, pci, pci->retc + 1);
+ nRet = 2 * *nP;
+
+ (void) nRP;
+
+ assert (pci->retc == nRet);
+
+ b = (BAT **) GDKmalloc (sizeof (BAT*) * pci->retc);
+ lstProps = (oid *)GDKmalloc(sizeof(oid) * (*nP));
+ for (i = 0; i < (*nP); i++){
+ oid *tmpp = (oid *) getArgReference(stk, pci, pci->retc + 2 +
i);
+ lstProps[i] = *tmpp;
+ }
+
+ for (i = 0; i < pci->retc; i++){
+ int tmp = -1;
+ //Get type from pci
+ int bat_type =
ATOMstorage(getColumnType(getArgType(mb,pci,i)));
+
+ if (bat_type == TYPE_str) printf("bat_type is string\n");
+ else printf("bat_type is %d\n", bat_type);
+
+ b[i] = BATnew(TYPE_void, bat_type, smallbatsz, TRANSIENT);
+ tmp = i;
+ BUNappend(b[i], &tmp, TRUE);
+ }
+
+ printf("There are %d props, among them %d RPs /n", *nP, *nRP);
+ bat2return(stk, pci, b);
+ GDKfree(b);
+
+ return MAL_SUCCEED;
+}
+
+
str
SQLrdfRetrieveSubschema(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
@@ -1656,6 +1728,90 @@ PropStat *global_p_propstat = NULL;
PropStat *global_c_propstat = NULL;
BAT *global_mbat = NULL;
BATiter global_mapi;
+PsoPropStat *pso_propstat = NULL; /* Store the offsets of a prop
+ in the exceptional PSO table */
+static
+void getOffsets(PsoPropStat *pso_pstat, oid *p, BUN *start, BUN *end){
+
+ BUN pos;
+
+ pos = BUNfnd(pso_pstat->pBat, p);
+ if (pos == BUN_NONE)
+ fprintf(stderr, "[Error] The prop "BUNFMT " must be there!\n",
*p);
+ else{
+ oid *tmpstart = (oid *) Tloc(pso_pstat->offsetBat, pos);
+ *start = (*tmpstart);
+ if (pos == BATcount(pso_pstat->pBat) - 1){ //This is the last
prop
+ *end = BUN_NONE;
+ }
+ else{
+ oid *tmpend = (oid *) Tloc(pso_pstat->offsetBat, pos +
1);
+ *end = (*tmpend) - 1;
+ }
+
+ }
+}
+
+void getSlides_per_P(PsoPropStat *pso_pstat, oid *p, BAT *obat, BAT *sbat, BAT
**ret_oBat, BAT **ret_sBat){
+ BUN l, h;
+
+ getOffsets(pso_pstat, p, &l, &h);
+
+ *ret_oBat = BATslice(obat, l, h);
+
+ *ret_sBat = BATslice(sbat, l, h);
+
+
+}
+
+/*
+ * From the full P BAT (column P) of the PSO
+ * triple table, extract the offsets where each
+ * prop starts.
+ * */
+static
+void build_PsoPropStat(BAT *full_pbat, int maxNumP, BAT *full_sbat, BAT
*full_obat){
+ BUN p, q;
+ oid *poid;
+ BATiter pi;
+ oid curP;
+ int batsize = 150000;
+ pi = bat_iterator(full_pbat);
+
+ batsize = maxNumP; //Can be smaller
+
+ pso_propstat = (PsoPropStat *) GDKmalloc(sizeof(PsoPropStat));
+ pso_propstat->pBat = BATnew(TYPE_void, TYPE_oid, batsize, TRANSIENT);
+ pso_propstat->pBat->tsorted = 1;
+ pso_propstat->offsetBat = BATnew(TYPE_void, TYPE_oid, batsize,
TRANSIENT);
+
+ curP = BUN_NONE;
+ BATloop(full_pbat, p, q){
+ poid = (oid *) BUNtloc(pi, p);
+ if (*poid != curP){ //Start new poid
+ oid tmpoffset = p;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list