Changeset: 95bc181cd423 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=95bc181cd423
Modified Files:
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_scenario.c
Branch: Dec2011
Log Message:

untested implementation to upgrade to dec2011, ie add missing like filter 
functions
and update interval second typed columns.


diffs (112 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -4827,7 +4827,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
        if ( b->T->nonil){
                if (scale)
                        for (; p<q; p++, o++)
-                               *o = (@1) ((*p +  (*p<0)?-5:5) / scales[scale]);
+                               *o = (@1) ((*p +  ((*p<0)?-5:5)) / 
scales[scale]);
                else
                        for (; p<q; p++, o++)
                                *o = (@1) (*p);
@@ -4837,7 +4837,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
                                *o = @1_nil;
                                bn->T->nonil= FALSE;
                        } else if (scale) {
-                               *o = (@1) ((*p +  (*p<0)?-5:5) / scales[scale]);
+                               *o = (@1) ((*p +  ((*p<0)?-5:5)) / 
scales[scale]);
                        } else {
                                *o = (@1) (*p);
                        }
@@ -5325,7 +5325,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
        if ( b->T->nonil){
                for (; p<q; p++, o++) {
                        if (scale) 
-                               val = (@2) ((*p+ (*p<0)?-5:5)/scales[scale]);
+                               val = (@2) ((*p+ ((*p<0)?-5:5))/scales[scale]);
                        else
                                val = (@2) (*p);
                        /* see if the number fits in the data type */
@@ -5345,7 +5345,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
                                bn->T->nonil= FALSE;
                        } else {
                                if (scale)
-                                       val = (@2) (( *p + ( 
*p<0)?-5:5)/scales[scale]);
+                                       val = (@2) (( *p + 
((*p<0)?-5:5))/scales[scale]);
                                else
                                        val = (@2) (*p);
                                /* see if the number fits in the data type */
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -366,6 +366,53 @@ handle_error(mvc *m, stream *out, int ps
        return go;
 }
 
+static str
+sql_update_dec2010( Client c, mvc *m )
+{
+       node *nsch, *ntab, *ncol;
+       sql_trans *tr;
+       char *buf = GDKmalloc(1024), *err = NULL;
+       int bufsize = 1024, pos = 0;
+
+       buf[0] = 0;
+       tr = m->session->tr;
+       for( nsch = tr->schemas.set->h; nsch; nsch= nsch->next) {
+               sql_schema *s = nsch->data;
+
+               if ( isalpha((int)s->base.name[0]) ) {
+                       if (!s->tables.set) 
+                               continue;
+                       for( ntab = (s)->tables.set->h ;ntab; ntab = 
ntab->next){
+                               sql_table *t = ntab->data;
+
+                               if (!isTable(t) || !t->columns.set) 
+                                       continue;
+                               for ( ncol = (t)->columns.set->h; ncol; ncol= 
ncol->next){
+                                       sql_column *c = (sql_column *) 
ncol->data;
+                       
+                                       if (c->type.type->eclass == EC_INTERVAL 
&& 
+                                           strcmp(c->type.type->base.name, 
"sec_interval") == 0) {
+                                               if (bufsize < pos + 100) 
+                                                       buf = GDKrealloc(buf, 
bufsize += 1024);
+                                               pos += snprintf(buf+pos, 
bufsize-pos, "update \"%s\".\"%s\" set \"%s\"=1000*\"%s\"\n",
+                                                       s->base.name, 
t->base.name, c->base.name, c->base.name);
+                                       }
+                               }
+                       }
+               }
+       }
+       if (bufsize < pos + 256) 
+               buf = GDKrealloc(buf, bufsize += 1024);
+       pos += snprintf(buf+pos, bufsize-pos, "create filter function 
\"like\"(val string, pat string, esc string) external name 
pcre.like_filter;\n");
+       pos += snprintf(buf+pos, bufsize-pos, "create filter function 
\"ilike\"(val string, pat string, esc string) external name 
pcre.ilike_filter;\n");
+       printf("%s\n", buf);
+       if ((err = SQLstatementIntern(c, &buf, "update", 1, 0)) != MAL_SUCCEED) 
{
+               GDKfree(buf);
+               return err;
+       }
+       GDKfree(buf);
+       return NULL;
+}
 
 str
 SQLinitClient(Client c)
@@ -478,6 +525,15 @@ SQLinitClient(Client c)
                        GDKfree(fullname);
                } else
                        fprintf(stderr, "!could not read createdb.sql\n");
+       } else { /* handle upgrades */
+               sql_subtype clob; 
+
+               sql_find_subtype(&clob, "clob", 0, 0);
+               if (!sql_bind_func3(m->sa, mvc_bind_schema(m,"sys"), "like", 
&clob, &clob, &clob, F_FILT )) {
+                       char *err;
+                       if ((err = sql_update_dec2010(c, m)) != NULL)
+                               fprintf(stderr, "!%s\n", err);
+               }
        }
        fflush(stdout);
        fflush(stderr);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to