mxArray * dbfield2mxArray( Dbptr db ) { mxArray *result; long type; Dbvalue value; char warning[STRSZ]; dbquery( db, dbFIELD_TYPE, &type ); antelope_mex_clear_register( 1 ); if( dbget( db, value.s ) < 0 ) { antelope_mex_clear_register( 1 ); return (mxArray *) NULL; } switch( type ) { case dbDBPTR: result = CreateDbptrStructFromDbptr( value.db ); break; case dbSTRING: copystrip( value.s, value.s, strlen( value.s ) ); result = mxCreateString( value.s ); break; case dbBOOLEAN: case dbINTEGER: case dbYEARDAY: copystrip( value.s, value.s, strlen( value.s ) ); result = CreateDouble( (double) atol( value.s ) ); break; case dbREAL: case dbTIME: copystrip( value.s, value.s, strlen( value.s ) ); result = CreateDouble( (double) atof( value.s ) ); break; default: sprintf( warning, "Can't interpret field of type %s", xlatnum( type, Dbxlat, NDbxlat ) ); mexWarnMsgTxt( warning ); result = (mxArray *) NULL; break; } return result; }
Dbvalue * mxArray2dbvalue( const mxArray *in, int type ) { Dbvalue *value; char warning[STRSZ]; char *s; value = (Dbvalue *) mxCalloc( 1, sizeof( Dbvalue ) ); switch( type ) { case dbDBPTR: if( ! get_dbptr( in, &value->db ) ) { mxFree( value ); value = (Dbvalue *) NULL; } break; case dbSTRING: if( ! mtlb_get_string( in, &s ) ) { mxFree( value ); value = (Dbvalue *) NULL; } else { strcpy( value->s, s ); mxFree( s ); } break; case dbBOOLEAN: case dbINTEGER: case dbYEARDAY: if( ! get_scalar( in, &value->d ) ) { mxFree( value ); value = (Dbvalue *) NULL; } else { value->i = (int) value->d; } break; case dbREAL: case dbTIME: if( ! get_scalar( in, &value->d ) ) { mxFree( value ); value = (Dbvalue *) NULL; } break; default: sprintf( warning, "Field type %s not recognized in dbaddv", xlatnum( type, Dbxlat, NDbxlat ) ); mexWarnMsgTxt( warning ); mxFree( value ); value = (Dbvalue *) NULL; break; } return value; }
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { Dbptr db; mxArray *array_ptr; char errmsg[STRSZ]; char *dbstring_code; int dbcode; int retcode; char *string; Tbl *tbl; long n; int i; if( nrhs != 2 ) { antelope_mexUsageMsgTxt ( USAGE ); return; } else if( ! get_dbptr( prhs[0], &db ) ) { antelope_mexUsageMsgTxt ( USAGE ); return; } else if( ! mtlb_get_string( prhs[1], &dbstring_code ) ) { antelope_mexUsageMsgTxt ( USAGE ); return; } dbcode = xlatname( dbstring_code, Dbxlat, NDbxlat ); switch( dbcode ) { case dbSCHEMA_DEFAULT: case dbDATABASE_FILENAME: case dbIDSERVER: case dbLOCKS: case dbSCHEMA_DESCRIPTION: case dbTIMEDATE_NAME: case dbDATABASE_DESCRIPTION: case dbTABLE_DESCRIPTION: case dbFIELD_DESCRIPTION: case dbSCHEMA_DETAIL: case dbDATABASE_DETAIL: case dbTABLE_DETAIL: case dbFIELD_DETAIL: case dbSCHEMA_NAME: case dbDATABASE_NAME: case dbTABLE_NAME: case dbFIELD_NAME: case dbTABLE_FILENAME: case dbTABLE_DIRNAME: case dbFIELD_RANGE: case dbFIELD_FORMAT: case dbDBPATH: case dbFORMAT: case dbFIELD_UNITS: case dbFIELD_BASE_TABLE: case dbUNIQUE_ID_NAME: if( ( retcode = dbquery(db, dbcode, &string) ) >= 0 ) { plhs[0] = mxCreateString( string ); } antelope_mex_clear_register( 1 ); break; case dbDATABASE_COUNT: case dbTABLE_COUNT: case dbFIELD_COUNT: case dbRECORD_COUNT: case dbTABLE_SIZE: case dbFIELD_SIZE: case dbFIELD_INDEX: case dbVIEW_TABLE_COUNT: case dbRECORD_SIZE: case dbTABLE_IS_WRITEABLE: case dbTABLE_IS_VIEW: case dbDATABASE_IS_WRITABLE: case dbTABLE_PRESENT: case dbTABLE_IS_TRANSIENT: if( ( retcode = dbquery(db, dbcode, &n) ) >= 0 ) { antelope_mex_clear_register( 1 ); plhs[0] = CreateDouble( (double) n ); if( plhs[0] == NULL ) { mxFree( dbstring_code ); mexErrMsgTxt( "dbquery: failed to create return value" ); } } else { antelope_mex_clear_register( 1 ); } break; case dbFIELD_TYPE: if( ( retcode = dbquery(db, dbcode, &n) ) >= 0 ) { antelope_mex_clear_register( 1 ); plhs[0] = mxCreateString( xlatnum( n, Dbxlat, NDbxlat ) ); } else { antelope_mex_clear_register( 1 ); } break; case dbLINK_FIELDS: case dbSCHEMA_FIELDS: case dbSCHEMA_TABLES: case dbFIELD_TABLES: case dbVIEW_TABLES: case dbTABLE_FIELDS: case dbPRIMARY_KEY: case dbALTERNATE_KEY: case dbFOREIGN_KEYS: if( ( retcode = dbquery(db, dbcode, &tbl) ) >= 0 ) { antelope_mex_clear_register( 1 ); plhs[0] = stringtbl2cellstr( tbl ); } else { antelope_mex_clear_register( 1 ); } break; default: sprintf( errmsg, "dbquery: bad code '%s'", dbstring_code ); mxFree( dbstring_code ); mexErrMsgTxt( errmsg ); break ; } mxFree( dbstring_code ); }