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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to