Changeset: 12854af12df1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=12854af12df1
Modified Files:
        
Branch: default
Log Message:

merged


diffs (truncated from 369 to 300 lines):

diff -r 3d33e0899e64 -r 12854af12df1 MonetDB/configure.ag
--- a/MonetDB/configure.ag      Fri Dec 03 20:55:11 2010 +0100
+++ b/MonetDB/configure.ag      Fri Dec 03 20:56:09 2010 +0100
@@ -84,10 +84,10 @@
 AM_MONETDB_LIBS()
 
 # Checks for typedefs, structures, and compiler characteristics.
-AC_COMPILE_IFELSE(AC_LANG_SOURCE([int foo(int * restrict p) { return *p; }]),
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo(int * restrict p) { return *p; 
}]])],
        AC_DEFINE(HAVE_RESTRICT, 1,
                [Define if the compiler supports the restrict keyword]),
-       AC_COMPILE_IFELSE(AC_LANG_SOURCE([int foo(int * __restrict__ p) { 
return *p; }]),
+       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo(int * __restrict__ p) { 
return *p; }]])],
                AC_DEFINE(HAVE___RESTRICT__, 1,
                        [Define if the compiler supports the __restrict__ 
keyword])))
 
diff -r 3d33e0899e64 -r 12854af12df1 
MonetDB5/src/mal/Tests/parseErrors.stable.out
--- a/MonetDB5/src/mal/Tests/parseErrors.stable.out     Fri Dec 03 20:55:11 
2010 +0100
+++ b/MonetDB5/src/mal/Tests/parseErrors.stable.out     Fri Dec 03 20:56:09 
2010 +0100
@@ -14,8 +14,8 @@
 #K := :=
 !SyntaxException:parseError:K := :=
 !SyntaxException:parseError:     ^Type identifier expected
-
-
+!SyntaxException:parseError:K := :=
+!SyntaxException:parseError:     ^';' expected
 function user.main():void;
     K;
     io.print(1);
diff -r 3d33e0899e64 -r 12854af12df1 sql/src/backends/monet5/vaults/Makefile.ag
--- a/sql/src/backends/monet5/vaults/Makefile.ag        Fri Dec 03 20:55:11 
2010 +0100
+++ b/sql/src/backends/monet5/vaults/Makefile.ag        Fri Dec 03 20:56:09 
2010 +0100
@@ -15,7 +15,7 @@
 # Copyright August 2008-2010 MonetDB B.V.
 # All Rights Reserved.
 
-INCLUDES = ../../../include ../../../common ../../../storage ../../../server 
../ \
+INCLUDES = ../../../include ../../../common ../../../storage ../../../server 
../ ../../../storage/bpm \
        $(MONETDB5_INCS) $(CLIENTS_INCS) $(MONETDB_INCS) $(READLINE_INCS) 
$(MSEED_CFLAGS) $(CFITSIO_CFLAGS)
 
 lib__vault = {
diff -r 3d33e0899e64 -r 12854af12df1 sql/src/backends/monet5/vaults/fits.mx
--- a/sql/src/backends/monet5/vaults/fits.mx    Fri Dec 03 20:55:11 2010 +0100
+++ b/sql/src/backends/monet5/vaults/fits.mx    Fri Dec 03 20:56:09 2010 +0100
@@ -32,6 +32,10 @@
 address FITSattach
 comment "Open a FITS file and return catalog of the table HDUs";
 
+pattern load(tablename :str):void
+address FITSloadTable
+comment "Load a FITS table from an attached file";
+
 
 @h
 #ifndef _FITS_
@@ -43,7 +47,9 @@
 #include "longnam.h"
 #include "sql_config.h"
 #include <sql_mvc.h>
+#include <sql_scenario.h>
 #include <sql.h>
+#include "bpm_storage.h"
 #include "clients.h"
 #include "mal.h" 
 #include "mal_client.h"
@@ -61,12 +67,15 @@
 
 fits_export str FITStest(int *res, str *fname);
 fits_export str FITSattach(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+fits_export str FITSloadTable(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 #endif
 
 @-
 
 @c
 #include "fits.h"
+#define FITS_INS_COL "INSERT INTO fits_columns(id, name, type, units,table_id) 
\
+        VALUES(%d, '%s','%s','%s',%d);"
 
 str
 FITStest(int *res, str *fname)
@@ -107,6 +116,7 @@
                fits_tbl = mvc_create_table(m, sch, "fits_tables", tt_table, 0, 
SQL_PERSIST, 0, 4);
                mvc_create_column_(m, fits_tbl, "id","int",32);
                mvc_create_column_(m, fits_tbl, "name","varchar",80);
+               mvc_create_column_(m, fits_tbl, "columns","int",32);
                mvc_create_column_(m, fits_tbl, "file_id","int",32);
                mvc_create_column_(m, fits_tbl, "hdu","int",32);
        }
@@ -117,9 +127,8 @@
                mvc_create_column_(m, fits_col, "id","int",32);
                mvc_create_column_(m, fits_col, "name","varchar",80);
                mvc_create_column_(m, fits_col, "type","varchar",80);
-               mvc_create_column_(m, fits_col, "mtype","int",32);
+               mvc_create_column_(m, fits_col, "units","varchar",10);
                mvc_create_column_(m, fits_col, "table_id","int",32);
-               mvc_create_column_(m, fits_col, "units","varchar",10);
        }
        
 }   
@@ -159,6 +168,50 @@
     return -1;
 }
 
+static int
+fits2subtype(sql_subtype *tpe, int t, long rep, long wid)
+{
+       
+       printf("Tpcode %d, rep %ld, wid %ld\n", t,rep,wid);
+    switch(t) {
+    case TBIT:
+    case TLOGICAL:
+               sql_find_subtype(tpe, "boolean", 0, 0 );
+               break;
+    case TBYTE:
+    case TSBYTE:
+               sql_find_subtype(tpe, "char", 1, 0 );
+               break;
+    case TSTRING:
+               sql_find_subtype(tpe, "varchar", (unsigned int)rep, 0);
+               break;
+    case TUSHORT:
+    case TSHORT:
+               sql_find_subtype(tpe, "smallint", 16, 0);
+               break;
+    case TUINT:
+    case TINT:
+    case TULONG:
+    case TLONG:
+               sql_find_subtype(tpe, "int", 32, 0);
+               break;
+    case TLONGLONG:
+               sql_find_subtype(tpe, "bigint", 64, 0);
+               break;
+    case TFLOAT:
+               sql_find_subtype(tpe, "real", 32, 0 );
+               break;
+    case TDOUBLE:
+               sql_find_subtype(tpe, "double", 51, 0 );
+               break;
+    /* missing */
+    case TCOMPLEX:
+    case TDBLCOMPLEX:
+        return -1;
+    }
+    return 1;
+}
+
 str FITSattach(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        mvc *m = NULL;
@@ -169,15 +222,12 @@
        str fname = *(str*) getArgReference(stk, pci, 1);
        fitsfile *fptr;  /* pointer to the FITS file */
        int status = 0, i, j, hdutype, hdunum = 1, cnum = 0;
-       int tpcode = 0, mtype;
        oid  fid, tid, rid = oid_nil;
-       char tname[BUFSIZ];
-       long tbcol, rep, wid;
-    char cname[BUFSIZ], tform[BUFSIZ], tunit[BUFSIZ], tnull[BUFSIZ], 
tdisp[BUFSIZ];
+       char tname[BUFSIZ], *s, bname[BUFSIZ]; /*, stmt[BUFSIZ];*/
+       long tbcol;
+       char cname[BUFSIZ], tform[BUFSIZ], tunit[BUFSIZ], tnull[BUFSIZ], 
tdisp[BUFSIZ];
        double tscal, tzero;
        
-
-       
        msg = getContext(cntxt, mb, &m, NULL);
        if (msg)
                return msg;
@@ -217,6 +267,14 @@
        col = mvc_bind_column(m, fits_tbl, "id");
        tid = store_funcs.count_col(col) + 1;
 
+       if ((s = strrchr(fname, DIR_SEP)) == NULL)
+               s = fname;
+       else
+               s++;
+       strcpy(bname, s);
+       s = strrchr(bname,'.');
+       if ( s ) *s = 0;
+
        fits_get_num_hdus(fptr, &hdunum, &status);
        for (i = 1; i <= hdunum; i++){
                fits_movabs_hdu(fptr, i, &hdutype, &status);
@@ -226,32 +284,42 @@
                /* SQL table name - the name of FITS extention */
                fits_read_key(fptr, TSTRING, "EXTNAME", tname, NULL, &status);
                if ( status ) {
-                       snprintf(tname,BUFSIZ,"%s_%d",fname,i);
+                       snprintf(tname,BUFSIZ,"%s_%d",bname,i);
                        status = 0;
                }
-               else {  /* check table name for existence */
+               else {  /* check table name for existence in the fits catalog */
+                       col = mvc_bind_column(m, fits_tbl, "name");
+                       rid = table_funcs.column_find_row(m->session->tr, col, 
tname, NULL);
+                               /* or as regular SQL table */
                        tbl = mvc_bind_table(m, sch, tname);
-                       if ( tbl )
-                               snprintf(tname,BUFSIZ,"%s_%d",fname,i);
+                       if (  rid != oid_nil || tbl )
+                               snprintf(tname,BUFSIZ,"%s_%d",bname,i);
                }
 
+               fits_get_num_cols(fptr, &cnum, &status);
+
                store_funcs.append_col(m->session->tr,
-                               mvc_bind_column(m, fits_tbl, "id"), &tid, 
TYPE_int);
+                       mvc_bind_column(m, fits_tbl, "id"), &tid, TYPE_int);
                store_funcs.append_col(m->session->tr,
                        mvc_bind_column(m, fits_tbl, "name"), tname, TYPE_str);
                store_funcs.append_col(m->session->tr,
+                       mvc_bind_column(m, fits_tbl, "columns"), &cnum, 
TYPE_str);
+               store_funcs.append_col(m->session->tr,
                        mvc_bind_column(m, fits_tbl, "file_id"), &fid, 
TYPE_int);
                store_funcs.append_col(m->session->tr,
                        mvc_bind_column(m, fits_tbl, "hdu"), &i, TYPE_int);
 
                /* read columns description */
+               /*              s = stmt;*/
 
-               fits_get_num_cols(fptr, &cnum, &status);
                for ( j = 1; j <= cnum; j++){
                    fits_get_acolparms(fptr, j, cname, &tbcol, tunit, tform, 
&tscal, &tzero, tnull, tdisp, &status);
-                       fits_get_coltype(fptr, j, &tpcode, &rep, &wid, &status);
-                       mtype = fits2mtype(tpcode);
+                       /*                      fits_get_coltype(fptr, j, 
&tpcode, &rep, &wid, &status);*/
 
+                       /*                      snprintf(stmt, BUFSIZ, 
FITS_INS_COL, j, cname, tform, tunit, (int)tid);
+                       printf("%s\n",stmt);
+                       msg = SQLstatementIntern(cntxt, 
&s,"fits.attach",TRUE,FALSE);
+                       */
                        store_funcs.append_col(m->session->tr,
                                mvc_bind_column(m, fits_col, "id"), &j, 
TYPE_int);
                        store_funcs.append_col(m->session->tr,
@@ -259,11 +327,9 @@
                        store_funcs.append_col(m->session->tr,
                                mvc_bind_column(m, fits_col, "type"), tform, 
TYPE_str);
                        store_funcs.append_col(m->session->tr,
-                               mvc_bind_column(m, fits_col, "mtype"), &mtype, 
TYPE_int);
-                       store_funcs.append_col(m->session->tr,
                                mvc_bind_column(m, fits_col, "table_id"), &tid, 
TYPE_int);
                        store_funcs.append_col(m->session->tr,
-                               mvc_bind_column(m, fits_col, "units"), tunit, 
TYPE_str);
+                               mvc_bind_column(m, fits_col, "units"), tunit, 
TYPE_str); 
                }
                tid++;
        }
@@ -272,5 +338,118 @@
        return MAL_SUCCEED;
 }   
 
+str FITSloadTable(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       mvc *m = NULL;
+       sql_schema *sch;
+       sql_table *fits_fl, *fits_tbl, *tbl = NULL;
+       sql_column *col;
+       sql_subtype tpe;
+       sql_bpm *p; 
+       fitsfile *fptr; 
+       str tname = *(str*) getArgReference(stk, pci, 1);
+       str fname;
+       str msg = MAL_SUCCEED; 
+       oid rid = oid_nil, frid = oid_nil;
+       int status = 0, cnum = 0, fid, hdu, hdutype, *tpcode = NULL, j, anynull;
+       long rep, wid, rows;
+       char keywrd[80], **cname;
+       BAT *b;
+       ptr nilptr;
+
+       msg = getContext(cntxt, mb, &m, NULL);
+       if (msg)
+               return msg;
+       sch = mvc_bind_schema(m,"sys");
+
+       fits_tbl = mvc_bind_table(m, sch, "fits_tables");
+       if ( fits_tbl == NULL ){
+               msg = createException(MAL, "fits.loadtable", "FITS catalog is 
missing.\n");
+               return msg;
+       }
+
+       tbl = mvc_bind_table(m, sch, tname);
+       if ( tbl ) {
+               msg = createException(MAL, "fits.loadtable", "Table %d is 
already created.\n", tname);
+               return msg;
+       };
+
+       col = mvc_bind_column(m, fits_tbl, "name");
+       rid = table_funcs.column_find_row(m->session->tr, col, tname, NULL);
+       if ( rid == oid_nil ){
+               msg = createException(MAL, "fits.loadtable", "Table %s is 
unknown in FITS catalog. Attach first the containing file\n", tname);
+               return msg;
+       }
+
+       /* Open FITS file and move to the table HDU */
+       col = mvc_bind_column(m, fits_tbl, "file_id");
+       fid = *(int*) table_funcs.column_find_value(m->session->tr, col, rid);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to