Changeset: fc046c40fc3a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fc046c40fc3a
Modified Files:
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_builder.h
Branch: default
Log Message:

Find or create constant variables.


diffs (270 lines):

diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -218,6 +218,21 @@ newExitStmt(MalBlkPtr mb, str nme)
        return q;
 }
 
+int
+getIntConstant(MalBlkPtr mb, int val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_int;
+       cst.val.ival= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_int,&cst);
+       return _t;
+}
+
 InstrPtr
 pushInt(MalBlkPtr mb, InstrPtr q, int val)
 {
@@ -233,6 +248,21 @@ pushInt(MalBlkPtr mb, InstrPtr q, int va
        return pushArgument(mb, q, _t);
 }
 
+int
+getWrdConstant(MalBlkPtr mb, wrd val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_wrd;
+       cst.val.wval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_wrd, &cst);
+       return _t;
+}
+
 InstrPtr
 pushWrd(MalBlkPtr mb, InstrPtr q, wrd val)
 {
@@ -248,6 +278,21 @@ pushWrd(MalBlkPtr mb, InstrPtr q, wrd va
        return pushArgument(mb, q, _t);
 }
 
+int
+getBteConstant(MalBlkPtr mb, bte val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_bte;
+       cst.val.btval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_bte, &cst);
+       return _t;
+}
+
 InstrPtr
 pushBte(MalBlkPtr mb, InstrPtr q, bte val)
 {
@@ -263,7 +308,22 @@ pushBte(MalBlkPtr mb, InstrPtr q, bte va
        return pushArgument(mb, q, _t);
 }
 
-InstrPtr
+int
+getOidConstant(MalBlkPtr mb, oid val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_oid;
+       cst.val.oval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_oid, &cst);
+       return _t;
+}
+
+InstrPtr 
 pushOid(MalBlkPtr mb, InstrPtr q, oid val)
 {
        int _t;
@@ -293,6 +353,21 @@ pushVoid(MalBlkPtr mb, InstrPtr q)
        return pushArgument(mb, q, _t);
 }
 
+int
+getLngConstant(MalBlkPtr mb, lng val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_lng;
+       cst.val.lval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_lng, &cst);
+       return _t;
+}
+
 InstrPtr
 pushLng(MalBlkPtr mb, InstrPtr q, lng val)
 {
@@ -308,6 +383,21 @@ pushLng(MalBlkPtr mb, InstrPtr q, lng va
        return pushArgument(mb, q, _t);
 }
 
+int
+getShtConstant(MalBlkPtr mb, sht val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_sht;
+       cst.val.shval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_sht, &cst);
+       return _t;
+}
+
 InstrPtr
 pushSht(MalBlkPtr mb, InstrPtr q, sht val)
 {
@@ -322,6 +412,21 @@ pushSht(MalBlkPtr mb, InstrPtr q, sht va
 }
 
 #ifdef HAVE_HGE
+int
+getHgeConstant(MalBlkPtr mb, hge val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_oid;
+       cst.val.hval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_hge, &cst);
+       return _t;
+}
+
 InstrPtr
 pushHge(MalBlkPtr mb, InstrPtr q, hge val)
 {
@@ -335,6 +440,21 @@ pushHge(MalBlkPtr mb, InstrPtr q, hge va
 }
 #endif
 
+int
+getDblConstant(MalBlkPtr mb, dbl val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_dbl;
+       cst.val.dval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_dbl, &cst);
+       return _t;
+}
+
 InstrPtr
 pushDbl(MalBlkPtr mb, InstrPtr q, dbl val)
 {
@@ -350,6 +470,21 @@ pushDbl(MalBlkPtr mb, InstrPtr q, dbl va
        return pushArgument(mb, q, _t);
 }
 
+int
+getFltConstant(MalBlkPtr mb, flt val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_flt;
+       cst.val.fval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_flt, &cst);
+       return _t;
+}
+
 InstrPtr
 pushFlt(MalBlkPtr mb, InstrPtr q, flt val)
 {
@@ -365,6 +500,22 @@ pushFlt(MalBlkPtr mb, InstrPtr q, flt va
        return pushArgument(mb, q, _t);
 }
 
+int
+getStrConstant(MalBlkPtr mb, str val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_str;
+       if ((cst.val.sval= GDKstrdup(val)) == NULL) 
+               return -1;
+       cst.len= (int) strlen(cst.val.sval);
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_str, &cst);
+       return _t;
+}
+
 InstrPtr
 pushStr(MalBlkPtr mb, InstrPtr q, const char *Val)
 {
@@ -383,6 +534,21 @@ pushStr(MalBlkPtr mb, InstrPtr q, const 
        return pushArgument(mb, q, _t);
 }
 
+int
+getBitConstant(MalBlkPtr mb, bit val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_bit;
+       cst.val.btval= val;
+       cst.len = 0;
+       _t= fndConstant(mb, &cst, MAL_VAR_WINDOW);
+       if( _t < 0)
+               _t = defConstant(mb, TYPE_bit, &cst);
+       return _t;
+}
+
 InstrPtr
 pushBit(MalBlkPtr mb, InstrPtr q, bit val)
 {
diff --git a/monetdb5/mal/mal_builder.h b/monetdb5/mal/mal_builder.h
--- a/monetdb5/mal/mal_builder.h
+++ b/monetdb5/mal/mal_builder.h
@@ -43,5 +43,18 @@ mal_export InstrPtr pushZero(MalBlkPtr m
 mal_export InstrPtr pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe);
 mal_export InstrPtr pushValue(MalBlkPtr mb, InstrPtr q, ValPtr cst);
 
+mal_export int getIntConstant(MalBlkPtr mb, int val);
+mal_export int getLngConstant(MalBlkPtr mb, lng val);
+mal_export int getShtConstant(MalBlkPtr mb, sht val);
+mal_export int getWrdConstant(MalBlkPtr mb, wrd val);
+mal_export int getBteConstant(MalBlkPtr mb, bte val);
+mal_export int getOidConstant(MalBlkPtr mb, oid val);
+mal_export int getDblConstant(MalBlkPtr mb, dbl val);
+mal_export int getFltConstant(MalBlkPtr mb, flt val);
+mal_export int getStrConstant(MalBlkPtr mb, str val);
+mal_export int getBitConstant(MalBlkPtr mb, bit val);
+#ifdef HAVE_HGE
+mal_export int getHgeConstant(MalBlkPtr mb, hge val);
+#endif
 #endif /* _MAL_BUILDER_ */
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to