Changeset: 18ccf0f79b19 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=18ccf0f79b19
Modified Files:
        sql/backends/monet5/vaults/netcdf/netcdf.c
        sql/backends/monet5/vaults/netcdf/netcdf.mal
        sql/backends/monet5/vaults/netcdf/netcdf_vault.h
Branch: SciQL-2-NetCDF
Log Message:

Import NetCDF variables


diffs (truncated from 886 to 300 lines):

diff --git a/sql/backends/monet5/vaults/netcdf/netcdf.c 
b/sql/backends/monet5/vaults/netcdf/netcdf.c
--- a/sql/backends/monet5/vaults/netcdf/netcdf.c
+++ b/sql/backends/monet5/vaults/netcdf/netcdf.c
@@ -31,246 +31,280 @@
         VALUES(%d, '%s');"
 
 #define INSDIM \
-       "INSERT INTO netcdf_dims(dim_id,file_id,name,length) \
+            "INSERT INTO netcdf_dims(dim_id,file_id,name,length) \
 VALUES(%d, %d, '%s', %d);"
 
 #define INSVAR \
-       "INSERT INTO netcdf_vars(var_id,file_id,name,vartype,ndim,coord_dim_id) 
\
+            "INSERT INTO 
netcdf_vars(var_id,file_id,name,vartype,ndim,coord_dim_id) \
 VALUES(%d, %d, '%s', '%s', %d, %d);"
 
 #define INSVARDIM \
-       "INSERT INTO netcdf_vardim(var_id,dim_id,file_id,dimpos) \
+            "INSERT INTO netcdf_vardim(var_id,dim_id,file_id,dimpos) \
 VALUES(%d, %d, %d, %d);"
 
 #define INSATTR \
-       "INSERT INTO 
netcdf_attrs(obj_name,att_name,att_type,value,file_id,gr_name) \
+            "INSERT INTO 
netcdf_attrs(obj_name,att_name,att_type,value,file_id,gr_name) \
 VALUES('%s', '%s', '%s', '%s', %d, '%s');"
 
+#define LOAD_NCDF_VAR(tpe,ncdftpe) \
+       { \
+       tpe *databuf; \
+       res = BATnew(TYPE_void, TYPE_##tpe, sz); \
+       if ( res == NULL ) \
+               return createException(MAL, "netcdf.importvar", 
MAL_MALLOC_FAIL); \
+       BATseqbase(res, 0); \
+       databuf = (tpe *)Tloc(res, BUNfirst(res)); \
+       if ( (retval = nc_get_var_##ncdftpe(ncid, varid, databuf)) ) \
+               return createException(MAL, "netcdf.importvar", \
+                                                  "Cannot read variable %d 
values: %s", \
+                                                  varid, nc_strerror(retval)); 
\
+       }
+
 str
 NCDFtest(int *vars, str *fname)
 {
-    int ncid;   /* dataset id */
-    int dims, ngatts, unlimdim;
-    int retval;
+               int ncid;   /* dataset id */
+         int dims, ngatts, unlimdim;
+         int retval;
 
-    str msg = MAL_SUCCEED;
+         str msg = MAL_SUCCEED;
 
        /* Open NetCDF file  */
-    if ((retval = nc_open(*fname, NC_NOWRITE, &ncid)))
+         if ((retval = nc_open(*fname, NC_NOWRITE, &ncid)))
        return createException(MAL, "netcdf.test", "Cannot open NetCDF file %s: 
%s", *fname, nc_strerror(retval));
 
-    if ((retval = nc_inq(ncid, &dims, vars, &ngatts, &unlimdim)))
+         if ((retval = nc_inq(ncid, &dims, vars, &ngatts, &unlimdim)))
        return createException(MAL, "netcdf.test", "Cannot read NetCDF header: 
%s", nc_strerror(retval));
 
-    if ((retval = nc_close(ncid)))
-      return createException(MAL, "netcdf.test", "Cannot close file %s: \
+         if ((retval = nc_close(ncid)))
+           return createException(MAL, "netcdf.test", "Cannot close file %s: \
 %s", *fname, nc_strerror(retval));
 
-    return msg;
+         return msg;
 }
 
 /* use function from ncdump utility: NetCDF type number to name */
 static const char *
 prim_type_name(nc_type type)
 {
-  switch (type) {
-  case NC_BYTE:
-    return "byte";
-  case NC_CHAR:
-    return "char";
-  case NC_SHORT:
-    return "short";
-  case NC_INT:
-    return "int";
-  case NC_FLOAT:
-    return "float";
-  case NC_DOUBLE:
-    return "double";
+       switch (type) {
+       case NC_BYTE:
+         return "byte";
+       case NC_CHAR:
+         return "char";
+       case NC_SHORT:
+         return "short";
+       case NC_INT:
+         return "int";
+       case NC_FLOAT:
+         return "float";
+       case NC_DOUBLE:
+         return "double";
 #ifdef USE_NETCDF4
-  case NC_UBYTE:
-    return "ubyte";
-  case NC_USHORT:
-    return "ushort";
-  case NC_UINT:
-    return "uint";
-  case NC_INT64:
-    return "int64";
-  case NC_UINT64:
-    return "uint64";
-  case NC_STRING:
-    return "string";
+       case NC_UBYTE:
+         return "ubyte";
+       case NC_USHORT:
+         return "ushort";
+       case NC_UINT:
+         return "uint";
+       case NC_INT64:
+         return "int64";
+       case NC_UINT64:
+         return "uint64";
+       case NC_STRING:
+         return "string";
 #endif /* USE_NETCDF4 */
-  default:
-    return "bad type";
-  }
+       default:
+         return "bad type";
+       }
 }
 
+/* To Do: check SQL/SciQL type correspondence */
+
+static str
+NCDFARRAYseries(bat *bid, bte start, bte step, int stop, int group, int series)
+{
+       if (stop <= (int) GDK_bte_max && group <= (int) GDK_bte_max && 
+                       series <= (int) GDK_bte_max) {
+               bte sta = (bte) start, ste = (bte) step, sto = (bte) stop;
+               return ARRAYseries_bte(bid, &sta, &ste, &sto, &group, &series);
+       }
+       else if (stop <= (int) GDK_sht_max && group <= (int) GDK_sht_max && 
+                       series <= (int) GDK_sht_max) {
+               sht sta = (sht) start, ste = (sht) step, sto = (sht) stop;
+               return ARRAYseries_sht(bid, &sta, &ste, &sto, &group, &series);
+       }
+       else {
+               int sta = (int) start, ste = (int) step, sto = (int) stop;
+               return ARRAYseries_int(bid, &sta, &ste, &sto, &group, &series);
+       }
+}
 
 str
 NCDFattach(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-  mvc *m = NULL;
-  sql_schema *sch = NULL;
-  sql_table *tfiles = NULL, *tdims = NULL, *tvars = NULL, *tvardim = NULL, 
*tattrs = NULL;
-  sql_column *col;
-  str msg = MAL_SUCCEED;
-  str fname = *(str*)getArgReference(stk, pci, 1);
-  char buf[BUFSIZ], *s= buf;
-  oid fid, rid = oid_nil;
+       mvc *m = NULL;
+       sql_schema *sch = NULL;
+       sql_table *tfiles = NULL, *tdims = NULL, *tvars = NULL, *tvardim = 
NULL, *tattrs = NULL;
+       sql_column *col;
+       str msg = MAL_SUCCEED;
+       str fname = *(str*)getArgReference(stk, pci, 1);
+       char buf[BUFSIZ], *s= buf;
+       oid fid, rid = oid_nil;
 
-  int ncid;   /* dataset id */
-  int ndims, nvars, ngatts, unlimdim;
-  int didx, vidx, vndims, vnatts, i, aidx, coord_dim_id = -1;
-  int vdims[NC_MAX_VAR_DIMS];
+       int ncid;   /* dataset id */
+       int ndims, nvars, ngatts, unlimdim;
+       int didx, vidx, vndims, vnatts, i, aidx, coord_dim_id = -1;
+       int vdims[NC_MAX_VAR_DIMS];
 
-  size_t dlen, alen;
-  char dname[NC_MAX_NAME+1], vname[NC_MAX_NAME+1], aname[NC_MAX_NAME +1], 
-    abuf[80], *aval;
-  char **dims = NULL;
-  nc_type vtype, atype; /* == int */
+       size_t dlen, alen;
+       char dname[NC_MAX_NAME+1], vname[NC_MAX_NAME+1], aname[NC_MAX_NAME +1], 
+         abuf[80], *aval;
+       char **dims = NULL;
+       nc_type vtype, atype; /* == int */
 
-  int retval, avalint;
-  float avalfl;
-  double avaldbl;
+       int retval, avalint;
+       float avalfl;
+       double avaldbl;
 
-  msg = getSQLContext(cntxt, mb, &m, NULL);
-  if (msg)
-    return msg;
+       msg = getSQLContext(cntxt, mb, &m, NULL);
+       if (msg)
+         return msg;
 
-  sch = mvc_bind_schema(m, "sys");
-  if ( !sch )
-    return createException(MAL, "netcdf.attach", "Cannot get schema sys\n");
+       sch = mvc_bind_schema(m, "sys");
+       if ( !sch )
+         return createException(MAL, "netcdf.attach", "Cannot get schema 
sys\n");
 
-  tfiles = mvc_bind_table(m, sch, "netcdf_files");
-  tdims = mvc_bind_table(m, sch, "netcdf_dims");
-  tvars = mvc_bind_table(m, sch, "netcdf_vars");
-  tvardim = mvc_bind_table(m, sch, "netcdf_vardim");
-  tattrs = mvc_bind_table(m, sch, "netcdf_attrs");
+       tfiles = mvc_bind_table(m, sch, "netcdf_files");
+       tdims = mvc_bind_table(m, sch, "netcdf_dims");
+       tvars = mvc_bind_table(m, sch, "netcdf_vars");
+       tvardim = mvc_bind_table(m, sch, "netcdf_vardim");
+       tattrs = mvc_bind_table(m, sch, "netcdf_attrs");
 
-  if (tfiles == NULL || tdims == NULL || tvars == NULL || 
-      tvardim == NULL || tattrs == NULL)
-    return createException(MAL, "netcdf.attach", "Catalog table mi\
+       if (tfiles == NULL || tdims == NULL || tvars == NULL || 
+           tvardim == NULL || tattrs == NULL)
+         return createException(MAL, "netcdf.attach", "Catalog table mi\
 ssing\n");
 
-  /* check if the file is already attached */
-  col = mvc_bind_column(m, tfiles, "location");
-  rid = table_funcs.column_find_row(m->session->tr, col, fname, NULL);
-  if (rid != oid_nil) 
-    return createException(SQL, "netcdf.attach", "File %s is already a\
+       /* check if the file is already attached */
+       col = mvc_bind_column(m, tfiles, "location");
+       rid = table_funcs.column_find_row(m->session->tr, col, fname, NULL);
+       if (rid != oid_nil) 
+         return createException(SQL, "netcdf.attach", "File %s is already a\
 ttached\n", fname);
 
-  /* Open NetCDF file  */
-  if ((retval = nc_open(fname, NC_NOWRITE, &ncid)))
-    return createException(MAL, "netcdf.test", "Cannot open NetCDF \
+       /* Open NetCDF file  */
+       if ((retval = nc_open(fname, NC_NOWRITE, &ncid)))
+         return createException(MAL, "netcdf.test", "Cannot open NetCDF \
 file %s: %s", fname, nc_strerror(retval));
 
-  if ((retval = nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdim)))
-    return createException(MAL, "netcdf.test", "Cannot read NetCDF \
+       if ((retval = nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdim)))
+         return createException(MAL, "netcdf.test", "Cannot read NetCDF \
 header: %s", nc_strerror(retval));
 
-  /* Insert row into netcdf_files table */
-  col = mvc_bind_column(m, tfiles, "file_id");
-  fid = store_funcs.count_col(col, 1) + 1;
+       /* Insert row into netcdf_files table */
+       col = mvc_bind_column(m, tfiles, "file_id");
+       fid = store_funcs.count_col(col, 1) + 1;
 
-  snprintf(buf, BUFSIZ, INSFILE, (int)fid, fname);
-  if ( ( msg = SQLstatementIntern(cntxt,&s,"netcdf.attach",TRUE,FALSE))
-      != MAL_SUCCEED )
-    goto finish;
+       snprintf(buf, BUFSIZ, INSFILE, (int)fid, fname);
+       if ( ( msg = SQLstatementIntern(cntxt,&s,"netcdf.attach",TRUE,FALSE))
+           != MAL_SUCCEED )
+         goto finish;
 
-  /* Read dimensions from NetCDF header and insert a row for each one into 
netcdf_dims table */
+       /* Read dimensions from NetCDF header and insert a row for each one 
into netcdf_dims table */
 
-  dims = (char **)GDKzalloc(sizeof(char *) * ndims);
-  for (didx = 0; didx < ndims; didx++){
-    if ((retval = nc_inq_dim(ncid, didx, dname, &dlen)))
-      return createException(MAL, "netcdf.attach", "Cannot read dimension %d : 
%s", didx, nc_strerror(retval));
+       dims = (char **)GDKzalloc(sizeof(char *) * ndims);
+       for (didx = 0; didx < ndims; didx++){
+         if ((retval = nc_inq_dim(ncid, didx, dname, &dlen)))
+           return createException(MAL, "netcdf.attach", "Cannot read dimension 
%d : %s", didx, nc_strerror(retval));
 
-    snprintf(buf, BUFSIZ, INSDIM, didx, (int)fid, dname, (int)dlen);
-    if ( ( msg = SQLstatementIntern(cntxt,&s,"netcdf.attach",TRUE,FALSE))
+         snprintf(buf, BUFSIZ, INSDIM, didx, (int)fid, dname, (int)dlen);
+         if ( ( msg = SQLstatementIntern(cntxt,&s,"netcdf.attach",TRUE,FALSE))
         != MAL_SUCCEED )
-      goto finish;
+           goto finish;
 
-    dims[didx] = GDKstrdup(dname);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to