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